diff --git a/GTPv2_v15.2.0_CNL113870.tpd b/GTPv2_v15.2.0_CNL113870.tpd
new file mode 100644
index 0000000..7957345
--- /dev/null
+++ b/GTPv2_v15.2.0_CNL113870.tpd
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<TITAN_Project_File_Information version="1.0">
+  <ProjectName>GTPv2_v15.2.0_CNL113870</ProjectName>
+  <ReferencedProjects>
+    <ReferencedProject name="GTPv2_PrivateExtensions_CNL113798" projectLocationURI="../GTPv2_PrivateExtensions_CNL113798/GTPv2_PrivateExtensions_CNL113798.tpd"/>
+    <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/>
+  </ReferencedProjects>
+  <Files>
+    <FileResource projectRelativePath="GTPv2_Types.ttcn" relativeURI="src/GTPv2_Types.ttcn"/>
+  </Files>
+  <ActiveConfiguration>Default</ActiveConfiguration>
+  <Configurations>
+    <Configuration name="Default">
+      <ProjectProperties>
+        <MakefileSettings>
+          <generateInternalMakefile>true</generateInternalMakefile>
+          <GNUMake>true</GNUMake>
+          <incrementalDependencyRefresh>true</incrementalDependencyRefresh>
+          <targetExecutable>bin/GTPv2_v15.2.0_CNL113870</targetExecutable>
+          <buildLevel>Level3-Creatingobjectfileswithdependencyupdate</buildLevel>
+        </MakefileSettings>
+        <LocalBuildSettings>
+          <workingDirectory>bin</workingDirectory>
+        </LocalBuildSettings>
+      </ProjectProperties>
+    </Configuration>
+  </Configurations>
+</TITAN_Project_File_Information>
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..3534f2f
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,277 @@
+Eclipse Public License - v 2.0
+
+    THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+    PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION
+    OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+  a) in the case of the initial Contributor, the initial content
+     Distributed under this Agreement, and
+
+  b) in the case of each subsequent Contributor:
+     i) changes to the Program, and
+     ii) additions to the Program;
+  where such changes and/or additions to the Program originate from
+  and are Distributed by that particular Contributor. A Contribution
+  "originates" from a Contributor if it was added to the Program by
+  such Contributor itself or anyone acting on such Contributor's behalf.
+  Contributions do not include changes or additions to the Program that
+  are not Modified Works.
+
+"Contributor" means any person or entity that Distributes the Program.
+
+"Licensed Patents" mean patent claims licensable by a Contributor which
+are necessarily infringed by the use or sale of its Contribution alone
+or when combined with the Program.
+
+"Program" means the Contributions Distributed in accordance with this
+Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement
+or any Secondary License (as applicable), including Contributors.
+
+"Derivative Works" shall mean any work, whether in Source Code or other
+form, that is based on (or derived from) the Program and for which the
+editorial revisions, annotations, elaborations, or other modifications
+represent, as a whole, an original work of authorship.
+
+"Modified Works" shall mean any work in Source Code or other form that
+results from an addition to, deletion from, or modification of the
+contents of the Program, including, for purposes of clarity any new file
+in Source Code form that contains any contents of the Program. Modified
+Works shall not include works that contain only declarations,
+interfaces, types, classes, structures, or files of the Program solely
+in each case in order to link to, bind by name, or subclass the Program
+or Modified Works thereof.
+
+"Distribute" means the acts of a) distributing or b) making available
+in any manner that enables the transfer of a copy.
+
+"Source Code" means the form of a Program preferred for making
+modifications, including but not limited to software source code,
+documentation source, and configuration files.
+
+"Secondary License" means either the GNU General Public License,
+Version 2.0, or any later versions of that license, including any
+exceptions or additional permissions as identified by the initial
+Contributor.
+
+2. GRANT OF RIGHTS
+
+  a) Subject to the terms of this Agreement, each Contributor hereby
+  grants Recipient a non-exclusive, worldwide, royalty-free copyright
+  license to reproduce, prepare Derivative Works of, publicly display,
+  publicly perform, Distribute and sublicense the Contribution of such
+  Contributor, if any, and such Derivative Works.
+
+  b) Subject to the terms of this Agreement, each Contributor hereby
+  grants Recipient a non-exclusive, worldwide, royalty-free patent
+  license under Licensed Patents to make, use, sell, offer to sell,
+  import and otherwise transfer the Contribution of such Contributor,
+  if any, in Source Code or other form. This patent license shall
+  apply to the combination of the Contribution and the Program if, at
+  the time the Contribution is added by the Contributor, such addition
+  of the Contribution causes such combination to be covered by the
+  Licensed Patents. The patent license shall not apply to any other
+  combinations which include the Contribution. No hardware per se is
+  licensed hereunder.
+
+  c) Recipient understands that although each Contributor grants the
+  licenses to its Contributions set forth herein, no assurances are
+  provided by any Contributor that the Program does not infringe the
+  patent or other intellectual property rights of any other entity.
+  Each Contributor disclaims any liability to Recipient for claims
+  brought by any other entity based on infringement of intellectual
+  property rights or otherwise. As a condition to exercising the
+  rights and licenses granted hereunder, each Recipient hereby
+  assumes sole responsibility to secure any other intellectual
+  property rights needed, if any. For example, if a third party
+  patent license is required to allow Recipient to Distribute the
+  Program, it is Recipient's responsibility to acquire that license
+  before distributing the Program.
+
+  d) Each Contributor represents that to its knowledge it has
+  sufficient copyright rights in its Contribution, if any, to grant
+  the copyright license set forth in this Agreement.
+
+  e) Notwithstanding the terms of any Secondary License, no
+  Contributor makes additional grants to any Recipient (other than
+  those set forth in this Agreement) as a result of such Recipient's
+  receipt of the Program under the terms of a Secondary License
+  (if permitted under the terms of Section 3).
+
+3. REQUIREMENTS
+
+3.1 If a Contributor Distributes the Program in any form, then:
+
+  a) the Program must also be made available as Source Code, in
+  accordance with section 3.2, and the Contributor must accompany
+  the Program with a statement that the Source Code for the Program
+  is available under this Agreement, and informs Recipients how to
+  obtain it in a reasonable manner on or through a medium customarily
+  used for software exchange; and
+
+  b) the Contributor may Distribute the Program under a license
+  different than this Agreement, provided that such license:
+     i) effectively disclaims on behalf of all other Contributors all
+     warranties and conditions, express and implied, including
+     warranties or conditions of title and non-infringement, and
+     implied warranties or conditions of merchantability and fitness
+     for a particular purpose;
+
+     ii) effectively excludes on behalf of all other Contributors all
+     liability for damages, including direct, indirect, special,
+     incidental and consequential damages, such as lost profits;
+
+     iii) does not attempt to limit or alter the recipients' rights
+     in the Source Code under section 3.2; and
+
+     iv) requires any subsequent distribution of the Program by any
+     party to be under a license that satisfies the requirements
+     of this section 3.
+
+3.2 When the Program is Distributed as Source Code:
+
+  a) it must be made available under this Agreement, or if the
+  Program (i) is combined with other material in a separate file or
+  files made available under a Secondary License, and (ii) the initial
+  Contributor attached to the Source Code the notice described in
+  Exhibit A of this Agreement, then the Program may be made available
+  under the terms of such Secondary Licenses, and
+
+  b) a copy of this Agreement must be included with each copy of
+  the Program.
+
+3.3 Contributors may not remove or alter any copyright, patent,
+trademark, attribution notices, disclaimers of warranty, or limitations
+of liability ("notices") contained within the Program from any copy of
+the Program which they Distribute, provided that Contributors may add
+their own appropriate notices.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities
+with respect to end users, business partners and the like. While this
+license is intended to facilitate the commercial use of the Program,
+the Contributor who includes the Program in a commercial product
+offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes
+the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and indemnify every
+other Contributor ("Indemnified Contributor") against any losses,
+damages and costs (collectively "Losses") arising from claims, lawsuits
+and other legal actions brought by a third party against the Indemnified
+Contributor to the extent caused by the acts or omissions of such
+Commercial Contributor in connection with its distribution of the Program
+in a commercial product offering. The obligations in this section do not
+apply to any claims or Losses relating to any actual or alleged
+intellectual property infringement. In order to qualify, an Indemnified
+Contributor must: a) promptly notify the Commercial Contributor in
+writing of such claim, and b) allow the Commercial Contributor to control,
+and cooperate with the Commercial Contributor in, the defense and any
+related settlement negotiations. The Indemnified Contributor may
+participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's responsibility
+alone. Under this section, the Commercial Contributor would have to
+defend claims against the other Contributors related to those performance
+claims and warranties, and if a court requires any other Contributor to
+pay any damages as a result, the Commercial Contributor must pay
+those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
+PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS"
+BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
+IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF
+TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR
+PURPOSE. Each Recipient is solely responsible for determining the
+appropriateness of using and distributing the Program and assumes all
+risks associated with its exercise of rights under this Agreement,
+including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs
+or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
+PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS
+SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
+PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
+EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further
+action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the
+Program itself (excluding combinations of the Program with other software
+or hardware) infringes such Recipient's patent(s), then such Recipient's
+rights granted under Section 2(b) shall terminate as of the date such
+litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it
+fails to comply with any of the material terms or conditions of this
+Agreement and does not cure such failure in a reasonable period of
+time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use
+and distribution of the Program as soon as reasonably practicable.
+However, Recipient's obligations under this Agreement and any licenses
+granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement,
+but in order to avoid inconsistency the Agreement is copyrighted and
+may only be modified in the following manner. The Agreement Steward
+reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement
+Steward has the right to modify this Agreement. The Eclipse Foundation
+is the initial Agreement Steward. The Eclipse Foundation may assign the
+responsibility to serve as the Agreement Steward to a suitable separate
+entity. Each new version of the Agreement will be given a distinguishing
+version number. The Program (including Contributions) may always be
+Distributed subject to the version of the Agreement under which it was
+received. In addition, after a new version of the Agreement is published,
+Contributor may elect to Distribute the Program (including its
+Contributions) under the new version.
+
+Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
+receives no rights or licenses to the intellectual property of any
+Contributor under this Agreement, whether expressly, by implication,
+estoppel or otherwise. All rights in the Program not expressly granted
+under this Agreement are reserved. Nothing in this Agreement is intended
+to be enforceable by any entity that is not a Contributor or Recipient.
+No third-party beneficiary rights are created under this Agreement.
+
+Exhibit A - Form of Secondary Licenses Notice
+
+"This Source Code may also be made available under the following 
+Secondary Licenses when the conditions for such availability set forth 
+in the Eclipse Public License, v. 2.0 are satisfied: {name license(s),
+version(s), and exceptions or additional permissions here}."
+
+  Simply including a copy of this Agreement, including this Exhibit A
+  is not sufficient to license the Source Code under Secondary Licenses.
+
+  If it is not possible or desirable to put the notice in a particular
+  file, then You may include the notice in a location (such as a LICENSE
+  file in a relevant directory) where a recipient would be likely to
+  look for such a notice.
+
+  You may add additional accurate notices of copyright ownership.
\ No newline at end of file
diff --git a/doc/GTPv2_v15.2.0_CNL113870_1551.doc b/doc/GTPv2_v15.2.0_CNL113870_1551.doc
new file mode 100644
index 0000000..aa63564
--- /dev/null
+++ b/doc/GTPv2_v15.2.0_CNL113870_1551.doc
Binary files differ
diff --git a/doc/GTPv2_v15.2.0_CNL113870_PRI.doc b/doc/GTPv2_v15.2.0_CNL113870_PRI.doc
new file mode 100644
index 0000000..5ffc9f7
--- /dev/null
+++ b/doc/GTPv2_v15.2.0_CNL113870_PRI.doc
Binary files differ
diff --git a/src/GTPv2_Types.ttcn b/src/GTPv2_Types.ttcn
new file mode 100644
index 0000000..cd74984
--- /dev/null
+++ b/src/GTPv2_Types.ttcn
@@ -0,0 +1,4980 @@
+///////////////////////////////////////////////////////////////////////////////
+// Copyright (c) 2000-2018 Ericsson Telecom AB
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v2.0
+// which accompanies this distribution, and is available at
+// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+///////////////////////////////////////////////////////////////////////////////
+//
+//  File:               GTPv2_Types.ttcn
+//  Description:        GTPv2 protocol module
+//  Rev:                <RnXnn>
+//  Prodnr:             CNL 113 870 
+//  Contact:            http://ttcn.ericsson.se
+//  Reference:          3GPP TS 29.274 v15.2.0
+//                      
+
+
+module GTPv2_Types
+{
+import from General_Types all;
+import from GTPv2_PrivateExtensions all;
+
+external function enc_PDU_GTPCv2(in PDU_GTPCv2 pdu) return octetstring
+with { extension "prototype(convert)" extension "encode(RAW)" }
+
+external function dec_PDU_GTPCv2(in octetstring stream) return PDU_GTPCv2
+with { extension "prototype(convert)" extension "decode(RAW)" }
+
+external function enc_PDU_GTPCv2_fast(in PDU_GTPCv2 pdu, out octetstring stream)
+with { extension "prototype(fast) encode(RAW)" }
+
+external function dec_PDU_GTPCv2_backtrack(in octetstring stream, out PDU_GTPCv2 pdu) return integer
+with { extension "prototype(backtrack) decode(RAW)" }
+
+
+// Information Elements
+
+//8.2.1A For future use
+type record Special_IE_Type_Extension
+{
+  OCT1                         elementIdentifier,  // dec 254, 'FE'O;  
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  IE_Extension_UnionType       iE_Type_Extension
+} with { 
+  variant (lengthIndicator) "LENGTHTO(iE_Type_Extension)"; 
+  variant "PRESENCE (elementIdentifier = 'FE'O; )";
+};
+
+type union IE_Extension_UnionType
+{
+  IE_Type_Extension  iE_Type_Extension
+}
+
+type record IE_Type_Extension
+{
+  OCT2                         elementIdentifier,
+  octetstring                  valueField
+}
+
+// 8.3
+type record IMSI
+{
+  OCT1              elementIdentifier,  //dec 1, '01'O  
+  LIN2_BO_LAST      lengthIndicator,
+  BIT4              instance,
+  BIT4              spare,
+  hexstring         iMSI_Value 
+} with { 
+  variant "PRESENCE (elementIdentifier = '01'O;)"   
+  variant (lengthIndicator) "LENGTHTO(iMSI_Value)" 
+  variant (iMSI_Value) "PADDING(yes)";
+  variant (iMSI_Value) "PADDING_PATTERN('1'B)"
+};
+
+// 8.4
+type record Cause
+{
+  OCT1              elementIdentifier, //dec 2, '02'O  
+  LIN2_BO_LAST      lengthIndicator,
+  BIT4              instance,
+  BIT4              spare,
+  OCT1              causeValue,
+  BIT1              cS,
+  BIT1              bCE,
+  BIT1              pCE,
+  BIT5              spare2,
+  OCT1              typeOfOffendingIE optional,
+  LIN2_BO_LAST      lengthIndicator2 optional,
+  BIT4              instanceOfOffendingIE optional,
+  BIT4              spare3 optional
+} with { 
+  variant "PRESENCE (elementIdentifier = '02'O; )" 
+  variant (lengthIndicator) "LENGTHTO(causeValue,cS,bCE,pCE,spare2,typeOfOffendingIE,
+  lengthIndicator2,instanceOfOffendingIE,spare3 )" 
+};
+
+// 8.5
+type record Recovery
+{
+  OCT1              elementIdentifier,  // dec 3, '03'O 
+  LIN2_BO_LAST      lengthIndicator,
+  BIT4              instance,
+  BIT4              spare,
+  integer           recoveryValue
+} with { 
+  variant (lengthIndicator) "LENGTHTO(recoveryValue)"
+  variant "PRESENCE (elementIdentifier = '03'O; )" 
+}; 
+
+// 8.6 
+type record AccessPointName
+{
+  OCT1              elementIdentifier, // dec 71, '47'O
+  LIN2_BO_LAST      lengthIndicator,
+  BIT4              instance,
+  BIT4              spare,
+  octetstring       aPN_Value 
+} with { 
+  variant (lengthIndicator) "LENGTHTO(aPN_Value)"
+  variant "PRESENCE (elementIdentifier = '47'O; )"   
+}; 
+
+// 8.7 
+type record AggregateMaximumBitRate
+{
+  OCT1              elementIdentifier, // dec 72, '48'O  
+  LIN2_BO_LAST      lengthIndicator,
+  BIT4              instance,
+  BIT4              spare,
+  OCT4              aPN_AMBR_for_uplink, 
+  OCT4              aPN_AMBR_for_downlink
+} with { 
+  variant (lengthIndicator) "LENGTHTO(aPN_AMBR_for_uplink,aPN_AMBR_for_downlink)"
+  variant "PRESENCE (elementIdentifier = '48'O; )" 
+}; 
+
+//8.8
+type record EPS_BearerID
+{
+  OCT1              elementIdentifier, // dec 73, '49'O  
+  LIN2_BO_LAST      lengthIndicator,
+  BIT4              instance,
+  BIT4              spare,
+  integer           ePS_Bearer_ID_Value,
+  BIT4              spare2,   //'0000'B
+  octetstring       additionalOctets  optional 
+}with { 
+  variant (lengthIndicator) "LENGTHTO(ePS_Bearer_ID_Value,spare2,additionalOctets)"
+  variant "PRESENCE (elementIdentifier = '49'O; )"
+  variant(ePS_Bearer_ID_Value) "FIELDLENGTH(4)"; 
+};
+
+type set of EPS_BearerID EPS_BearerID_List;
+
+//8.9
+type union IPv4_IPv6_Address{
+  OCT4                       iPv4_Address,
+  OCT16                      iPv6_Address
+};
+
+type record IP_Address
+{
+  OCT1                elementIdentifier,  // dec 74, '4A'O   
+  LIN2_BO_LAST        lengthIndicator,
+  BIT4                instance,
+  BIT4                spare,
+  IPv4_IPv6_Address   iPv4_IPv6_Address
+} with { 
+  variant (lengthIndicator) "LENGTHTO(iPv4_IPv6_Address)"
+  variant "PRESENCE (elementIdentifier = '4A'O; )" 
+  variant (iPv4_IPv6_Address) "CROSSTAG( iPv4_Address, lengthIndicator = 4;
+  iPv6_Address, lengthIndicator = 16)"
+};
+
+type set of IP_Address IP_Address_List;
+
+//8.10
+type record MEI
+{
+  OCT1                elementIdentifier, // dec 75, '4B'O;
+  LIN2_BO_LAST        lengthIndicator,
+  BIT4                instance,
+  BIT4                spare,
+  octetstring         mEI_Value
+} with { 
+  variant (lengthIndicator) "LENGTHTO(mEI_Value)"
+  variant "PRESENCE (elementIdentifier = '4B'O; )" 
+};
+
+//8.11
+type record MSISDN
+{
+  OCT1                elementIdentifier,  // dec 76, '4C'O; 
+  LIN2_BO_LAST        lengthIndicator,
+  BIT4                instance,
+  BIT4                spare,
+  hexstring           mSISDN_Value 
+}  with { 
+  variant (lengthIndicator) "LENGTHTO(mSISDN_Value)"
+  variant "PRESENCE (elementIdentifier = '4C'O; )" 
+  variant (mSISDN_Value) "PADDING(yes)";
+  variant (mSISDN_Value) "PADDING_PATTERN('1'B)"  
+
+};
+
+type set of MSISDN MSISDN_List;
+
+//8.12
+type record Indication
+{
+  OCT1                elementIdentifier,   // dec 77, '4D'O; 
+  LIN2_BO_LAST        lengthIndicator,
+  BIT4                instance,
+  BIT4                spare,
+  BIT1                sGWCI,
+  BIT1                iSRAI,
+  BIT1                iSRSI,
+  BIT1                oI,           
+  BIT1                dFI,
+  BIT1                hI,
+  BIT1                dTF,
+  BIT1                dAF,
+  BIT1                mSV,
+  BIT1                sI,
+  BIT1                pT,
+  BIT1                pBit,
+  BIT1                cRSI,
+  BIT1                cFSI,
+  BIT1                uIMSI,
+  BIT1                sQCI,
+  BIT1                cCRSI optional,
+  BIT1                iSRAU optional, 
+  BIT1                mBMDT optional,
+  BIT1                s4AF optional,
+  BIT1                s6AF optional,
+  BIT1                sRNI optional,
+  BIT1                pBIC optional,
+  BIT1                retLoc optional, 
+  BIT1                cPSR optional,
+  BIT1                cLII optional,
+  BIT1                cSFBI optional, 
+  BIT1                pPSI optional, 
+  BIT1                pPON_PPEI optional, 
+  BIT1                pPOF optional, 
+  BIT1                aRRL optional, 
+  BIT1                cPRAI optional, 
+  BIT1                aOPI optional, 
+  BIT1                aOSI optional, 
+  BIT1                pCRI optional,
+  BIT1                pSCI optional,
+  BIT1                bDWI optional,
+  BIT1                dTCI optional,
+  BIT1                uASI optional,
+  BIT1                nSI optional,
+  BIT1                wPMSI optional,
+  BIT1                uNACCSI optional,
+  BIT1                pNSI optional,
+  BIT1                s11TF optional,
+  BIT1                pMTSMI optional,
+  BIT1                cPOPCI optional,
+  BIT1                ePCOSI optional,
+  BIT1                rOAAI optional,
+  BIT1                tSPCMI optional,
+  BIT1                eNBCRSI optional,
+  BIT1                spare_1 optional,
+  BIT1                spare_2 optional,
+  BIT1                spare_3 optional,
+  BIT1                spare_4 optional,
+  BIT1                spare_5 optional,
+  BIT1                spare_6 optional,
+  octetstring         additionalOctets  optional   
+} with { 
+  variant (lengthIndicator) "LENGTHTO(sGWCI,iSRAI,iSRSI,oI,dFI,hI,dTF,dAF,
+  mSV,sI,pT,pBit,cRSI,cFSI,uIMSI,sQCI, 
+  cCRSI, iSRAU,mBMDT,s4AF,s6AF,sRNI,pBIC,retLoc,
+  cPSR,cLII,cSFBI,pPSI,pPON_PPEI,pPOF,aRRL,cPRAI,aOPI,aOSI,pCRI,pSCI,bDWI,dTCI,uASI,nSI,
+  wPMSI,uNACCSI,pNSI,s11TF,pMTSMI,cPOPCI,ePCOSI,rOAAI, tSPCMI, eNBCRSI, spare_1, spare_2, spare_3, spare_4, spare_5, spare_6, additionalOctets)"
+  variant "PRESENCE (elementIdentifier = '4D'O; )"
+};
+
+type set of Indication Indication_List;
+
+//8.13
+// 24.301 (9.9.4.8) -> 24.008 (10.5.6.3)
+type set of  ProtocolID_or_ContainerID   ProtocolIDs_and_ContainerIDs;
+
+type record ProtocolID_or_ContainerID
+{
+  OCT2               protocolID_or_ContainerID,
+  LIN1               lengthIndicator,
+  octetstring        protID_orContID_Contents
+} with { variant (lengthIndicator) "LENGTHTO (protID_orContID_Contents)"};
+
+type record ProtocolConfigOptions
+{
+  OCT1                         elementIdentifier, // dec 78 '4E'O;
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  BIT3                         configProtocol,
+  BIT4                         spare2,  //'0000'B
+  BIT1                         extensionField,   //'1'B
+  ProtocolIDs_and_ContainerIDs protocolIDs_and_ContainerIDs optional
+} with { 
+  variant (lengthIndicator) "LENGTHTO(configProtocol,spare2,extensionField,protocolIDs_and_ContainerIDs)"
+  variant "PRESENCE (elementIdentifier = '4E'O; )" 
+};
+
+//8.14 
+type union PDN_Address_and_Prefix{
+  OCT4                       iPv4_Address,
+  IPv6                       iPv6_Address,
+  IPv4_IPv6                  iPv4_IPv6 
+};
+
+type record IPv6
+{
+  integer   prefixLength, 
+  OCT16     iPv6_Address 
+};
+
+type record IPv4_IPv6
+{
+  integer          prefixLength, 
+  OCT16            iPv6_Address, 
+  OCT4             iPv4_Address
+};
+
+type record PDN_AddressAllocation
+{
+  OCT1                         elementIdentifier,  // dec 79 '4F'O;
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare, 
+  BIT3                         pDN_Type,
+  BIT5                         spare2,  //'00000'B
+  PDN_Address_and_Prefix       pDN_Address_and_Prefix optional
+} with { 
+  variant (lengthIndicator) "LENGTHTO(pDN_Type,spare2,pDN_Address_and_Prefix)"
+  variant "PRESENCE (elementIdentifier = '4F'O; )"
+  variant (pDN_Address_and_Prefix) "CROSSTAG
+  (
+  iPv4_Address,             pDN_Type ='001'B;
+  iPv6_Address,             pDN_Type ='010'B;
+  iPv4_IPv6,                pDN_Type ='011'B;  
+  )"
+};
+
+//8.15
+type record Bearer_QoS
+{
+  OCT1                         elementIdentifier,  // dec 80 '50'O; 
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  BIT1                         pVI,
+  BIT1                         spare2,
+  BIT4                         pL,
+  BIT1                         pCI,
+  BIT1                         spare3,  
+  OCT1                         labelQCI,
+  OCT5                         maxBitrateUplink,
+  OCT5                         maxBitrateDownLink,
+  OCT5                         guaranteedBitrateUplink,
+  OCT5                         guaranteedBitrateDownLink,
+  octetstring                  additionalOctets optional  
+} with { 
+  variant (lengthIndicator) "LENGTHTO(pVI,spare2,pL,pCI,spare3,
+  labelQCI,maxBitrateUplink,maxBitrateDownLink,
+  guaranteedBitrateUplink,guaranteedBitrateDownLink,additionalOctets)"
+  variant "PRESENCE (elementIdentifier = '50'O; )" 
+};
+
+//8.16
+type record FlowQoS
+{
+  OCT1                         elementIdentifier,  // dec 81 '51'O;  
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  OCT1                         labelQCI,
+  OCT5                         maxBitrateUplink,
+  OCT5                         maxBitrateDownLink,
+  OCT5                         guaranteedBitrateUplink,
+  OCT5                         guaranteedBitrateDownLink,
+  octetstring                  additionalOctets  optional  
+}with { 
+  variant (lengthIndicator) "LENGTHTO(labelQCI,maxBitrateUplink,maxBitrateDownLink,guaranteedBitrateUplink,guaranteedBitrateDownLink,additionalOctets)"
+  variant "PRESENCE (elementIdentifier = '51'O; )" 
+};
+
+//8.17
+type record RAT_Type
+{
+  OCT1                         elementIdentifier,  // dec 82, '52'O;   
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  integer                      rAT_TypeValue,
+  octetstring                  additionalOctets  optional 
+} with { 
+  variant (lengthIndicator) "LENGTHTO(rAT_TypeValue,additionalOctets)"
+  variant "PRESENCE (elementIdentifier = '52'O; )" 
+};
+
+//8.18
+type record ServingNetwork
+{
+  OCT1                         elementIdentifier,   // dec 83, '53'O;   
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  HEX1                         mccDigit1,  
+  HEX1                         mccDigit2,
+  HEX1                         mccDigit3,
+  HEX1                         mncDigit3,
+  HEX1                         mncDigit1,
+  HEX1                         mncDigit2,
+  octetstring                  additionalOctets  optional 
+}with { 
+  variant (lengthIndicator) "LENGTHTO(mccDigit1,mccDigit2,mccDigit3,mncDigit3,mncDigit1,mncDigit2,additionalOctets)"
+  variant "PRESENCE (elementIdentifier = '53'O; )" 
+};
+
+//8.19 24.008 10.5.6.12
+type union TrafficFlowTemplateV
+{
+  TrafficFlowTemplateV_CreateAddReplaceTFT
+  trafficFlowTemplateV_CreateAddReplaceTFT,
+  TrafficFlowTemplateV_DeletePacketFilter
+  trafficFlowTemplateV_DeletePacketFilter,
+  TrafficFlowTemplateV_Delete_Existing_TFT_or_No_TFT_Operation
+  trafficFlowTemplateV_Delete_Existing_TFT_or_No_TFT_Operation
+};
+
+
+type record TrafficFlowTemplateV_CreateAddReplaceTFT
+{
+  integer                                numberOfPacketFilters,
+  BIT1                                   eBIT,
+  BIT3                                   operationCodeTFT, 
+  PacketFilterList_CreateAddReplaceTFT   packetFilterList_CreateAddReplaceTFT,
+  ParametersList                         parametersList            optional
+} with {
+  variant "PRESENCE (operationCodeTFT  = '001'B, //  Create New TFT
+  operationCodeTFT  = '011'B, //  Add packet filters to existing TFT
+  operationCodeTFT  = '100'B  //  Replace packet filters in existing TFT
+  )";
+  variant(parametersList)       "PRESENCE(eBIT = '1'B)";
+  variant(numberOfPacketFilters)"FIELDLENGTH(4)";
+  variant(numberOfPacketFilters)"LENGTHTO(packetFilterList_CreateAddReplaceTFT)";
+  variant(numberOfPacketFilters)"UNIT(elements)";
+};
+
+
+type record TrafficFlowTemplateV_DeletePacketFilter
+{
+  integer                                numberOfPacketFilters,
+  BIT1                                   eBIT,
+  BIT3                                   operationCodeTFT,
+  //'101'B or '011'B or '100'B
+  PacketFilterList_DeletePacketFilter    packetFilterList_DeletePacketFilter,
+  ParametersList                         parametersList         optional
+} with {
+  variant "PRESENCE (operationCodeTFT = '101'B)"  // Delete packet filters from existing TFT
+  variant(parametersList) "PRESENCE(eBIT = '1'B)";
+  variant(numberOfPacketFilters)"FIELDLENGTH(4)";
+  variant(numberOfPacketFilters)"LENGTHTO(packetFilterList_DeletePacketFilter)";
+  variant  (numberOfPacketFilters)"UNIT(elements)";
+};
+
+
+type record TrafficFlowTemplateV_Delete_Existing_TFT_or_No_TFT_Operation
+{
+  BIT4                         numberOfPacketFilters, //'0000'B
+  // numberOfPacketFilters is meaningless here since there is no PacketFilterList
+  BIT1                         eBIT,
+  BIT3                         operationCodeTFT,      // '010'B  or '110'B
+  ParametersList               parametersList   optional
+} with {
+  variant "PRESENCE (operationCodeTFT = '010'B,  // delete existing TFT
+  operationCodeTFT = '110'B   // No TFT Operation
+  )";
+  variant (parametersList) "PRESENCE(eBIT = '1'B)"
+};
+
+
+type record of PacketFilter PacketFilterList_CreateAddReplaceTFT;
+
+
+type record PacketFilter
+{
+  PacketFilterIdentifier       identifier,
+  OCT1                         evaluationPrecedence,
+  LIN1                         lengthIndicator,
+  octetstring                  contents
+} with { variant (lengthIndicator) "LENGTHTO (contents)"};
+
+
+type record of PacketFilterIdentifier  PacketFilterList_DeletePacketFilter;
+
+type record  PacketFilterIdentifier
+{
+  BIT4     identifier,
+  BIT2     direction,
+  BIT2     spare
+};
+
+
+type record of Parameter ParametersList;
+
+
+type record Parameter
+{
+  OCT1               parameterIdentifier,
+  LIN1               lengthIndicator,
+  octetstring        contents
+} with { variant (lengthIndicator) "LENGTHTO (contents)"};
+
+
+type record EPS_BearerLevel_TFT
+{
+  OCT1                         elementIdentifier,   // dec 84, '54'O;   
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  TrafficFlowTemplateV         trafficFlowTemplateValue
+} with { 
+  variant (lengthIndicator) "LENGTHTO(trafficFlowTemplateValue)"
+  variant "PRESENCE (elementIdentifier = '54'O; )";  
+};
+
+type set of EPS_BearerLevel_TFT EPS_BearerLevel_TFT_List;
+
+//8.20
+type record TrafficAggregateDescription
+{
+  OCT1                         elementIdentifier,     // dec 85, '55'O; 
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  octetstring                  trafficAggregateDescriptionValue          
+} with { 
+  variant (lengthIndicator) "LENGTHTO(trafficAggregateDescriptionValue)"
+  variant "PRESENCE (elementIdentifier = '55'O; )";  
+};
+
+//8.21
+type set of UserLocationInfo UserLocationInfo_List;
+  
+type record UserLocationInfo
+{
+  OCT1                         elementIdentifier,   // dec 86, '56'O; 
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  BIT1                         cGI_Flag,
+  BIT1                         sAI_Flag,
+  BIT1                         rAI_Flag,
+  BIT1                         tAI_Flag,
+  BIT1                         eCGI_Flag, 
+  BIT1                         lAI_Flag, 
+  BIT1                         macro_eNodeB_ID_Flag,
+  BIT1                         extendedMacro_eNodeB_ID_Flag,
+  CGI                          cGI optional,
+  SAI                          sAI optional,
+  RAI                          rAI optional,
+  TAI                          tAI optional,
+  ECGI                         eCGI optional,
+  LAI                          lAI optional,
+  Macro_eNodeB_ID              macro_eNodeB_ID optional,
+  ExtendedMacro_eNodeB_ID      extendedMacro_eNodeB_ID optional,
+  octetstring                  additionalOctets  optional 
+} with { 
+  variant (lengthIndicator) "LENGTHTO(cGI_Flag,sAI_Flag,rAI_Flag,tAI_Flag,eCGI_Flag,
+  lAI_Flag,macro_eNodeB_ID_Flag, extendedMacro_eNodeB_ID_Flag,cGI,sAI,rAI,tAI,eCGI,lAI, macro_eNodeB_ID, extendedMacro_eNodeB_ID, additionalOctets)"
+  variant(cGI)       "PRESENCE(cGI_Flag = '1'B)";
+  variant(sAI)       "PRESENCE(sAI_Flag = '1'B)";
+  variant(rAI)       "PRESENCE(rAI_Flag = '1'B)";
+  variant(tAI)       "PRESENCE(tAI_Flag = '1'B)";
+  variant(eCGI)      "PRESENCE(eCGI_Flag = '1'B)";
+  variant(lAI)       "PRESENCE(lAI_Flag = '1'B)";  
+  variant(macro_eNodeB_ID) "PRESENCE(macro_eNodeB_ID_Flag = '1'B)";  
+  variant(extendedMacro_eNodeB_ID) "PRESENCE(extendedMacro_eNodeB_ID_Flag = '1'B)";  
+  variant "PRESENCE (elementIdentifier = '56'O; )"   
+};
+
+//8.21.1
+type record CGI
+{  
+  HEX1                         mccDigit1,
+  HEX1                         mccDigit2,
+  HEX1                         mccDigit3,
+  HEX1                         mncDigit3, 
+  HEX1                         mncDigit1,
+  HEX1                         mncDigit2,
+  OCT2                         lAC,
+  OCT2                         cI
+};
+
+//8.21.2
+type record SAI
+{
+  HEX1                         mccDigit1,
+  HEX1                         mccDigit2,
+  HEX1                         mccDigit3,
+  HEX1                         mncDigit3,
+  HEX1                         mncDigit1, 
+  HEX1                         mncDigit2, 
+  OCT2                         lAC,
+  OCT2                         sAC  
+};
+
+//8.21.3
+type record RAI 
+{
+  HEX1                         mccDigit1,
+  HEX1                         mccDigit2,
+  HEX1                         mccDigit3,
+  HEX1                         mncDigit3,
+  HEX1                         mncDigit1,
+  HEX1                         mncDigit2,
+  OCT2                         lAC,
+  OCT2                         rAC  
+};  
+
+//8.21.4
+type record TAI
+{
+  HEX1                         mccDigit1,
+  HEX1                         mccDigit2,
+  HEX1                         mccDigit3,
+  HEX1                         mncDigit3,
+  HEX1                         mncDigit1, 
+  HEX1                         mncDigit2, 
+  OCT2                         tAC 
+};  
+
+//8.21.5
+type record ECGI
+{
+  HEX1                         mccDigit1,
+  HEX1                         mccDigit2,
+  HEX1                         mccDigit3,
+  HEX1                         mncDigit3,
+  HEX1                         mncDigit1, 
+  HEX1                         mncDigit2,
+  HEX1                         spare,                  
+  integer                      eCI    
+} with { 
+  variant (spare,eCI) "FIELDORDER(msb)";                  
+  variant(eCI) "FIELDLENGTH(28)";
+  variant (eCI) "BYTEORDER(last)";
+};  
+
+//8.21.6
+type record LAI
+{
+  HEX1                         mccDigit1,
+  HEX1                         mccDigit2,
+  HEX1                         mccDigit3,
+  HEX1                         mncDigit3,
+  HEX1                         mncDigit1, 
+  HEX1                         mncDigit2,
+  OCT2                         lAC
+}
+
+//8.21.7
+// Macro_eNodeB_ID
+
+//8.21.8
+type record ExtendedMacro_eNodeB_ID
+{
+  HEX1                         mccDigit1,
+  HEX1                         mccDigit2,
+  HEX1                         mccDigit3,
+  HEX1                         mncDigit3,
+  HEX1                         mncDigit1, 
+  HEX1                         mncDigit2,
+  BIT2                         spare,
+  BIT1                         sMeNB,
+  bitstring                    targetID length(21)
+} with { 
+  variant (spare,sMeNB,targetID) "FIELDORDER(msb)";
+  variant (targetID) "BYTEORDER(last)";
+}
+
+//8.22
+type record FullyQualifiedTEID
+{
+  OCT1                         elementIdentifier,   // dec 87, '57'O; 
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  integer                      interfaceType, 
+  BIT1                         v6_Flag,
+  BIT1                         v4_Flag,
+  OCT4                         tEID_GRE_Key,
+  OCT4                         iPv4_Address optional,
+  OCT16                        iPv6_Address optional,
+  octetstring                  additionalOctets  optional    
+} with {   
+  variant "PRESENCE (elementIdentifier = '57'O; )" 
+  variant (lengthIndicator) "LENGTHTO(interfaceType,v6_Flag,v4_Flag,tEID_GRE_Key,
+  iPv4_Address,iPv6_Address,additionalOctets)" 
+  variant(interfaceType) "FIELDLENGTH(6)";
+  variant(iPv4_Address)  "PRESENCE(v4_Flag = '1'B)";
+  variant(iPv6_Address)  "PRESENCE(v6_Flag = '1'B)";
+}; 
+
+type set of FullyQualifiedTEID FullyQualifiedTEID_List;
+
+//8.23
+type record TMSI
+{
+  OCT1                         elementIdentifier,  // dec 88, '58'O;  
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  OCT4                         tMSI_Value 
+} with { 
+  variant (lengthIndicator) "LENGTHTO(tMSI_Value)"; 
+  variant "PRESENCE (elementIdentifier = '58'O; )";
+};
+
+//8.24
+type record GlobalCN_ID
+{
+  OCT1                         elementIdentifier,  // dec 89, '59'O;  
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  HEX1                         mccDigit1,
+  HEX1                         mccDigit2,
+  HEX1                         mccDigit3,
+  HEX1                         mncDigit3, 
+  HEX1                         mncDigit1,
+  HEX1                         mncDigit2,
+  octetstring                  cN_ID  
+} with { 
+  variant (lengthIndicator) "LENGTHTO(mccDigit1,mccDigit2,mccDigit3,mncDigit3,mncDigit1,mncDigit2,cN_ID)"
+  variant "PRESENCE (elementIdentifier = '59'O; )";  
+};
+
+//8.25
+type record EPS_Bearer_ID
+{
+  integer   ePS_Bearer_ID_Value,
+  BIT4      spare    // '0000'B
+} with {
+  variant(ePS_Bearer_ID_Value) "FIELDLENGTH(4)";}
+
+type set of EPS_Bearer_ID EPS_Bearer_IDs;
+
+type record S103_PDF
+{
+  OCT1                         elementIdentifier,// dec 90, '5A'O; 
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  integer                      hSGW_AddrForForwardingLength (4,16),
+  octetstring                  hSGW_AddrForForwarding length (4..16),
+  OCT4                         gRE_Key,
+  integer                      ePSBearerID_Number,
+  EPS_Bearer_IDs               ePS_Bearer_IDs  
+} with { 
+  variant (lengthIndicator) "LENGTHTO(hSGW_AddrForForwardingLength,hSGW_AddrForForwarding,gRE_Key,ePSBearerID_Number,ePS_Bearer_IDs)"; 
+  variant "PRESENCE (elementIdentifier = '5A'O; )";  
+  variant (hSGW_AddrForForwardingLength) "LENGTHTO(hSGW_AddrForForwarding)"; 
+  variant (ePSBearerID_Number) "LENGTHTO(ePS_Bearer_IDs)";
+  variant (ePSBearerID_Number) "UNIT (elements)";   
+};
+
+type set of S103_PDF S103_PDF_List
+
+//8.26
+type record S1_UDF
+{
+  OCT1                         elementIdentifier,  // dec 91, '5B'O; 
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  integer                      ePS_Bearer_ID_Value,
+  BIT4                         spare2,    // '0000'B 
+  integer                      servingGWAddrLength (0,4,16),
+  octetstring                  servingGWAddr length (4..16) optional,    
+  OCT4                         servingGW_S1U_TEID    
+} with { 
+  variant (lengthIndicator) "LENGTHTO(ePS_Bearer_ID_Value,spare2,servingGWAddrLength,servingGWAddr,servingGW_S1U_TEID)";
+  variant "PRESENCE (elementIdentifier = '5B'O; )"; 
+  variant(ePS_Bearer_ID_Value) "FIELDLENGTH(4)";
+  variant (servingGWAddrLength) "LENGTHTO(servingGWAddr)";
+};
+
+type set of S1_UDF S1_UDF_List
+
+//8.27
+type record DelayValue
+{
+  OCT1                         elementIdentifier,   // dec 92 , '5C'O 
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  integer                      delayValue, //(integer multiples of 50 millisec)
+  octetstring                  additionalOctets  optional 
+} 
+with { 
+  variant (lengthIndicator) "LENGTHTO(delayValue,additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = '5C'O; )";  
+};
+
+//8.28 - Grouped
+type set BearerContextIEs
+{
+  EPS_BearerID                     ePS_Bearer_ID optional,
+  Cause                            cause optional,
+  EPS_BearerLevel_TFT              ePS_Bearer_TFT optional,  
+  FullyQualifiedTEID_List          fullyQualifiedTEID optional, 
+  Bearer_QoS                       bearerLevel_QoS optional,
+  ChargingID                       chargingID optional,
+  BearerFlags                      bearerFlags optional,
+  TransactionIdentifier            transactionIdentifier optional,
+  ProtocolConfigOptions            protocolConfigOptions optional,
+  RAN_NASCause_List                rAN_NASCause optional,
+  APCO                             additionalProtocolConfigOptions optional,
+  ExtendedProtocolConfigOptions    extendedProtocolConfigOptions optional
+}
+with { 
+  variant(fullyQualifiedTEID) "REPEATABLE(yes)"; 
+  variant(rAN_NASCause) "REPEATABLE(yes)"; 
+};
+
+type record BearerContextGrouped
+{
+  OCT1                         elementIdentifier, // dec 93 , '5D'O
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,  
+  BIT4                         spare,
+  BearerContextIEs             bearerContextIEs
+} with { 
+  variant (lengthIndicator) "LENGTHTO(bearerContextIEs)"; 
+  variant "PRESENCE (elementIdentifier = '5D'O; )"; 
+};
+
+type set of BearerContextGrouped BearerContextGrouped_List;
+
+//8.29
+type record ChargingID
+{
+  OCT1                         elementIdentifier, // dec 94, '5E'O
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  OCT4                         chargingID_Value,
+  octetstring                  additionalOctets  optional    
+} with { 
+  variant (lengthIndicator) "LENGTHTO(chargingID_Value,additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = '5E'O; )"; 
+};
+
+//8.30
+type record ChargingCharacteristics
+{
+  OCT1                         elementIdentifier, // dec 95, '5F'O 
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  OCT2                         chargingCharacteristicsValue,
+  octetstring                  additionalOctets  optional
+} with { 
+  variant (lengthIndicator) "LENGTHTO(chargingCharacteristicsValue,additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = '5F'O; )"; 
+};
+
+//8.31
+type record TraceInformation
+{
+  OCT1                         elementIdentifier, // dec 96, '60'O
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  HEX1                         mccDigit1,
+  HEX1                         mccDigit2,
+  HEX1                         mccDigit3,
+  HEX1                         mncDigit3, 
+  HEX1                         mncDigit1,
+  HEX1                         mncDigit2,
+  OCT3                         traceIDValue,
+  OCT9                         triggeringEvents,
+  OCT2                         listOfNE_Types,  
+  OCT1                         sessionTraceDepth, 
+  OCT12                        listOfInterfaces,
+  octetstring                  iPAddressOfTraceCollectionEntity 
+} with { 
+  variant (lengthIndicator) "LENGTHTO(mccDigit1,mccDigit2,mccDigit3,mncDigit3, mncDigit1,mncDigit2,
+  traceIDValue,triggeringEvents,listOfNE_Types,sessionTraceDepth,
+  listOfInterfaces,iPAddressOfTraceCollectionEntity)"; 
+  variant "PRESENCE (elementIdentifier = '60'O; )";        
+};
+
+//8.32
+type record BearerFlags
+{
+  OCT1                         elementIdentifier, // dec 97, '61'O 
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  BIT1                         pPC,
+  BIT1                         vB,
+  BIT1                          vind,
+  BIT1                          aSI,
+  BIT4                         spare2,
+  octetstring                  additionalOctets  optional
+} with { 
+  variant (lengthIndicator) "LENGTHTO(pPC,vB,spare2,additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = '61'O; )"; 
+};
+
+//8.33
+//VOID
+
+//8.34
+type record PDN_Type
+{
+  OCT1                         elementIdentifier,   // dec 99, '63'O 
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  BIT3                         pDN_TypeValue,
+  BIT5                         spare2,
+  octetstring                  additionalOctets  optional
+} with { 
+  variant (lengthIndicator) "LENGTHTO(pDN_TypeValue,spare2,additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = '63'O; )";  
+};
+
+//8.35
+type record ProcedureTransactionID
+{
+  OCT1                         elementIdentifier,  // dec 100, '64'O 
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  integer                      pTI_Value,
+  octetstring                  additionalOctets  optional
+} with { 
+  variant (lengthIndicator) "LENGTHTO(pTI_Value,additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = '64'O; )";      
+};
+
+//8.36 Void
+
+//8.37 Void
+
+//8.38
+type union MM_Context
+{
+  GSM_Key_and_Triplets                         gSM_Key_and_Triplets,
+  UMTS_Key_UsedCipher_and_Quintuplets          uMTS_Key_UsedCipher_and_Quintuplets,
+  GSM_Key_UsedCipher_and_Quintuplets           gSM_Key_UsedCipher_and_Quintuplets,
+  UMTS_key_and_Quintuplets                     uMTS_key_and_Quintuplets,
+  EPS_SecurityContext_and_Quadruplets          ePS_SecurityContext_and_Quadruplets,
+  UMTS_Key_Quadruplets_and_Quintuplets         uMTS_Key_Quadruplets_and_Quintuplets
+}
+
+type set of AuthTriplet AuthTriplets;
+
+type record AuthTriplet
+{
+  OCT16     rAND,
+  OCT4      sRES,
+  OCT8      kc
+};
+
+type set of AuthQuintuplet AuthQuintuplets;
+
+type record AuthQuintuplet { 
+  OCT16                     rand,
+  integer                   xresLength,
+  octetstring               xres,
+  OCT16                     ck,
+  OCT16                     ik,
+  integer                   autnLength,
+  octetstring               autn 
+} with {
+  variant (xresLength) "LENGTHTO(xres)";
+  variant (autnLength) "LENGTHTO(autn)"; 
+};
+
+type set of AuthQuadruplet AuthQuadruplets;
+
+type record AuthQuadruplet
+{
+  OCT16                     rand,
+  integer                   xresLength,
+  octetstring               xres,
+  integer                   autnLength,
+  octetstring               autn,
+  octetstring               k_asme length (32) 
+} with {
+  variant (xresLength) "LENGTHTO(xres)";
+  variant (autnLength) "LENGTHTO(autn)"; 
+};
+
+type record GSM_Key_and_Triplets
+{
+  OCT1                         elementIdentifier,  // dec 103, '67'O
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  BIT3                         cksn,
+  BIT1                         dRXI,
+  BIT1                         spare2,
+  integer                      securityMode, 
+  BIT1                         sAMBRI,  
+  BIT1                         uAMBRI,
+  BIT3                         spare3,
+  integer                      noofTriplets, 
+  BIT3                         usedCipher,
+  BIT5                         spare4, 
+  OCT8                         kc, 
+  AuthTriplets                 triplets, 
+  OCT2                         drx_par optional,  
+  OCT4                         uplinkSubscribedUE_AMBR optional,
+  OCT4                         downlinkSubscribedUE_AMBR optional,
+  OCT4                         uplinkUsedUE_AMBR optional,
+  OCT4                         downlinkUsedUE_AMBR optional, 
+  integer                      lengthOfUE_NEtworkCapability,
+  octetstring                  uE_NEtworkCapability, 
+  integer                      lengthOfMS_NetworkCapability,
+  octetstring                  mS_NetworkCapability, 
+  integer                      lengthOfMobileEquipmentIdentity,
+  octetstring                  mobileEquipmentIdentity,
+  BIT1                         uNA,
+  BIT1                         gENA,
+  BIT1                         gANA,
+  BIT1                         iNA,
+  BIT1                         eNA,
+  BIT1                         hNNA,
+  BIT1                         nBNA,
+  BIT1                         eCNA,  
+  integer                      lengthOfVoiceDomainPreferenceAndUEsUsageSetting optional, //"extendable" optional for backward compatibility
+  octetstring                  voiceDomainPreferenceAndUEsUsageSetting optional,         //"extendable" optional for backward compatibility
+  octetstring                  additionalOctets  optional                                //"extendable" optional for backward compatibility
+} with { 
+  variant (lengthIndicator) "LENGTHTO(cksn,dRXI,spare2,securityMode,sAMBRI,uAMBRI,spare3,noofTriplets,usedCipher,spare4, 
+  kc,triplets,drx_par,uplinkSubscribedUE_AMBR,downlinkSubscribedUE_AMBR,
+  uplinkUsedUE_AMBR,downlinkUsedUE_AMBR,lengthOfUE_NEtworkCapability,
+  uE_NEtworkCapability,lengthOfMS_NetworkCapability,mS_NetworkCapability,
+  lengthOfMobileEquipmentIdentity,mobileEquipmentIdentity,
+  uNA,gENA,gANA,iNA,eNA,hNNA,nBNA,eCNA,
+  lengthOfVoiceDomainPreferenceAndUEsUsageSetting,
+  voiceDomainPreferenceAndUEsUsageSetting,
+  additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = '67'O; )";   
+  variant (securityMode) "FIELDLENGTH(3)";  
+  variant (noofTriplets) "FIELDLENGTH(3)"; 
+  variant (noofTriplets) "LENGTHTO(triplets)";
+  variant (noofTriplets) "UNIT(elements)";  
+  variant (drx_par) "PRESENCE (dRXI = '1'B; )";  
+  variant (lengthOfUE_NEtworkCapability) "LENGTHTO(uE_NEtworkCapability)";  
+  variant (lengthOfMS_NetworkCapability) "LENGTHTO(mS_NetworkCapability)";  
+  variant (lengthOfMobileEquipmentIdentity) "LENGTHTO(mobileEquipmentIdentity)"; 
+  variant (lengthOfVoiceDomainPreferenceAndUEsUsageSetting) "LENGTHTO(voiceDomainPreferenceAndUEsUsageSetting)";  
+  variant (uplinkSubscribedUE_AMBR) "PRESENCE (sAMBRI = '1'B; )";  
+  variant (downlinkSubscribedUE_AMBR) "PRESENCE (sAMBRI = '1'B; )";    
+  variant (uplinkUsedUE_AMBR) "PRESENCE (uAMBRI = '1'B; )";  
+  variant (downlinkUsedUE_AMBR) "PRESENCE (uAMBRI = '1'B; )";           
+};
+
+type record UMTS_Key_UsedCipher_and_Quintuplets
+{
+  OCT1                         elementIdentifier,  // dec 104, '68'O
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  BIT3                         cksn_ksi,
+  BIT1                         dRXI,
+  BIT1                         spare2,
+  integer                      securityMode, 
+  BIT1                         sAMBRI,
+  BIT1                         uAMBRI,
+  BIT1                         uGIPAI,
+  BIT1                         gUPII,
+  BIT1                         iOVI,  
+  integer                      noofQuintuplets, 
+  BIT3                         usedCipher,
+  BIT3                         usedGPRSIntegrityProtectionAlgorithm,
+  BIT2                         spare3,  
+  OCT16                        ck,
+  OCT16                        ik, 
+  AuthQuintuplets              quintuplets, 
+  OCT2                         drx_par optional,    
+  OCT4                         uplinkSubscribedUE_AMBR optional,
+  OCT4                         downlinkSubscribedUE_AMBR optional,
+  OCT4                         uplinkUsedUE_AMBR optional,
+  OCT4                         downlinkUsedUE_AMBR optional, 
+  integer                      lengthOfUE_NEtworkCapability,
+  octetstring                  uE_NEtworkCapability, 
+  integer                      lengthOfMS_NetworkCapability,
+  octetstring                  mS_NetworkCapability, 
+  integer                      lengthOfMobileEquipmentIdentity,
+  octetstring                  mobileEquipmentIdentity,
+  BIT1                         uNA,
+  BIT1                         gENA,
+  BIT1                         gANA,
+  BIT1                         iNA,
+  BIT1                         eNA,
+  BIT1                         hNNA,
+  BIT1                         nBNA,
+  BIT1                         eCNA,  
+  integer                      lengthOfVoiceDomainPreferenceAndUEsUsageSetting optional, //"extendable" optional for backward compatibility
+  octetstring                  voiceDomainPreferenceAndUEsUsageSetting optional,         //"extendable" optional for backward compatibility
+  integer                      lengthOfHigherBitratesThan16Mbpsflags optional,           //"extendable" optional for backward compatibility
+  octetstring                  higherBitratesThan16Mbpsflags optional,                   //"extendable" optional for backward compatibility
+  LIN1                         iOV_UpdatesCounter optional,                   //"extendable" optional for backward compatibility
+  octetstring                  additionalOctets  optional                                //"extendable" optional for backward compatibility
+} with { 
+  variant (lengthIndicator) "LENGTHTO(cksn_ksi,dRXI,spare2,securityMode,sAMBRI,uAMBRI,uGIPAI,gUPII,iOVI,noofQuintuplets, 
+  usedCipher,usedGPRSIntegrityProtectionAlgorithm,spare3,ck,ik,quintuplets,drx_par,uplinkSubscribedUE_AMBR,
+  downlinkSubscribedUE_AMBR,uplinkUsedUE_AMBR,downlinkUsedUE_AMBR, 
+  lengthOfUE_NEtworkCapability,uE_NEtworkCapability,lengthOfMS_NetworkCapability,
+  mS_NetworkCapability,lengthOfMobileEquipmentIdentity,mobileEquipmentIdentity,
+  uNA,gENA,gANA,iNA,eNA,hNNA,nBNA,eCNA,
+  lengthOfVoiceDomainPreferenceAndUEsUsageSetting,
+  voiceDomainPreferenceAndUEsUsageSetting,
+  lengthOfHigherBitratesThan16Mbpsflags,
+  higherBitratesThan16Mbpsflags,iOV_UpdatesCounter,
+  additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = '68'O; )";   
+  variant (securityMode) "FIELDLENGTH(3)";  
+  variant (noofQuintuplets) "FIELDLENGTH(3)";
+  variant (noofQuintuplets) "LENGTHTO(quintuplets)";
+  variant (noofQuintuplets) "UNIT(elements)"; 
+  variant (drx_par) "PRESENCE (dRXI = '1'B; )";  
+  variant (lengthOfUE_NEtworkCapability) "LENGTHTO(uE_NEtworkCapability)";  
+  variant (lengthOfMS_NetworkCapability) "LENGTHTO(mS_NetworkCapability)";  
+  variant (lengthOfMobileEquipmentIdentity) "LENGTHTO(mobileEquipmentIdentity)"; 
+  variant (lengthOfVoiceDomainPreferenceAndUEsUsageSetting) "LENGTHTO(voiceDomainPreferenceAndUEsUsageSetting)";  
+  variant (lengthOfHigherBitratesThan16Mbpsflags) "LENGTHTO(higherBitratesThan16Mbpsflags)";  
+  variant (uplinkSubscribedUE_AMBR) "PRESENCE (sAMBRI = '1'B; )";  
+  variant (downlinkSubscribedUE_AMBR) "PRESENCE (sAMBRI = '1'B; )";    
+  variant (uplinkUsedUE_AMBR) "PRESENCE (uAMBRI = '1'B; )";  
+  variant (downlinkUsedUE_AMBR) "PRESENCE (uAMBRI = '1'B; )";       
+  variant (iOV_UpdatesCounter) "PRESENCE (iOVI = '1'B; )";       
+};
+
+type record GSM_Key_UsedCipher_and_Quintuplets
+{
+  OCT1                         elementIdentifier,  // dec 105, '69'O 
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  BIT3                         cksn_ksi,
+  BIT1                         dRXI,
+  BIT1                         spare2,
+  integer                      securityMode, 
+  BIT1                         sAMBRI,
+  BIT1                         uAMBRI,
+  BIT3                         spare3,  
+  integer                      noofQuintuplets,  
+  BIT3                         usedCipher,
+  BIT5                         spare4,  
+  OCT8                         kc, 
+  AuthQuintuplets              quintuplets, 
+  OCT2                         drx_par optional,     
+  OCT4                         uplinkSubscribedUE_AMBR optional,
+  OCT4                         downlinkSubscribedUE_AMBR optional,
+  OCT4                         uplinkUsedUE_AMBR optional,
+  OCT4                         downlinkUsedUE_AMBR optional, 
+  integer                      lengthOfUE_NEtworkCapability,
+  octetstring                  uE_NEtworkCapability, 
+  integer                      lengthOfMS_NetworkCapability,
+  octetstring                  mS_NetworkCapability, 
+  integer                      lengthOfMobileEquipmentIdentity,
+  octetstring                  mobileEquipmentIdentity,
+  BIT1                         uNA,
+  BIT1                         gENA,
+  BIT1                         gANA,
+  BIT1                         iNA,
+  BIT1                         eNA,
+  BIT1                         hNNA,
+  BIT1                         nBNA,
+  BIT1                         eCNA,  
+  integer                      lengthOfVoiceDomainPreferenceAndUEsUsageSetting optional, //"extendable" optional for backward compatibility
+  octetstring                  voiceDomainPreferenceAndUEsUsageSetting optional,         //"extendable" optional for backward compatibility
+  integer                      lengthOfHigherBitratesThan16Mbpsflags optional,           //"extendable" optional for backward compatibility
+  octetstring                  higherBitratesThan16Mbpsflags optional,                   //"extendable" optional for backward compatibility
+  octetstring                  additionalOctets  optional                                //"extendable" optional for backward compatibility
+} with { 
+  variant (lengthIndicator) "LENGTHTO(cksn_ksi,dRXI,spare2,securityMode,sAMBRI,uAMBRI,spare3,  
+  noofQuintuplets,usedCipher,spare4,kc,quintuplets, 
+  drx_par,uplinkSubscribedUE_AMBR,downlinkSubscribedUE_AMBR,
+  uplinkUsedUE_AMBR,downlinkUsedUE_AMBR,lengthOfUE_NEtworkCapability,
+  uE_NEtworkCapability,lengthOfMS_NetworkCapability,mS_NetworkCapability, 
+  lengthOfMobileEquipmentIdentity,mobileEquipmentIdentity, 
+  uNA,gENA,gANA,iNA,eNA,hNNA,nBNA,eCNA,
+  lengthOfVoiceDomainPreferenceAndUEsUsageSetting,
+  voiceDomainPreferenceAndUEsUsageSetting,
+  lengthOfHigherBitratesThan16Mbpsflags,
+  higherBitratesThan16Mbpsflags,
+  additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = '69'O; )";   
+  variant (securityMode) "FIELDLENGTH(3)";  
+  variant (noofQuintuplets) "FIELDLENGTH(3)";
+  variant (noofQuintuplets) "LENGTHTO(quintuplets)";
+  variant (noofQuintuplets) "UNIT(elements)";
+  variant (drx_par) "PRESENCE (dRXI = '1'B; )";  
+  variant (lengthOfUE_NEtworkCapability) "LENGTHTO(uE_NEtworkCapability)";  
+  variant (lengthOfMS_NetworkCapability) "LENGTHTO(mS_NetworkCapability)";  
+  variant (lengthOfMobileEquipmentIdentity) "LENGTHTO(mobileEquipmentIdentity)"; 
+  variant (lengthOfVoiceDomainPreferenceAndUEsUsageSetting) "LENGTHTO(voiceDomainPreferenceAndUEsUsageSetting)";  
+  variant (lengthOfHigherBitratesThan16Mbpsflags) "LENGTHTO(higherBitratesThan16Mbpsflags)";  
+  variant (uplinkSubscribedUE_AMBR) "PRESENCE (sAMBRI = '1'B; )";  
+  variant (downlinkSubscribedUE_AMBR) "PRESENCE (sAMBRI = '1'B; )";    
+  variant (uplinkUsedUE_AMBR) "PRESENCE (uAMBRI = '1'B; )";  
+  variant (downlinkUsedUE_AMBR) "PRESENCE (uAMBRI = '1'B; )";         
+};
+
+type record UMTS_key_and_Quintuplets
+{
+  OCT1                         elementIdentifier,  // dec 106, '6A'O 
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare, 
+  BIT3                         ksi,
+  BIT1                         dRXI,
+  BIT1                         spare2,
+  integer                      securityMode, 
+  BIT1                         sAMBRI,
+  BIT1                         uAMBRI,   
+  BIT1                         uGIPAI,   
+  BIT1                         gUPII,   
+  BIT1                         iOVI,  
+  integer                      noofQuintuplets, 
+  BIT3                         usedGPRSIntegrityProtectionAlgorithm, 
+  BIT5                         spare4, 
+  OCT16                        ck,
+  OCT16                        ik,
+  AuthQuintuplets              quintuplets,     
+  OCT2                         drx_par optional,     
+  OCT4                         uplinkSubscribedUE_AMBR optional,
+  OCT4                         downlinkSubscribedUE_AMBR optional,
+  OCT4                         uplinkUsedUE_AMBR optional,
+  OCT4                         downlinkUsedUE_AMBR optional, 
+  integer                      lengthOfUE_NEtworkCapability,
+  octetstring                  uE_NEtworkCapability, 
+  integer                      lengthOfMS_NetworkCapability,
+  octetstring                  mS_NetworkCapability, 
+  integer                      lengthOfMobileEquipmentIdentity,
+  octetstring                  mobileEquipmentIdentity,
+  BIT1                         uNA,
+  BIT1                         gENA,
+  BIT1                         gANA,
+  BIT1                         iNA,
+  BIT1                         eNA,
+  BIT1                         hNNA,
+  BIT1                         nBNA,
+  BIT1                         eCNA,  
+  integer                      lengthOfVoiceDomainPreferenceAndUEsUsageSetting optional, //"extendable" optional for backward compatibility
+  octetstring                  voiceDomainPreferenceAndUEsUsageSetting optional,         //"extendable" optional for backward compatibility
+  integer                      lengthOfHigherBitratesThan16Mbpsflags optional,           //"extendable" optional for backward compatibility
+  octetstring                  higherBitratesThan16Mbpsflags optional,                   //"extendable" optional for backward compatibility
+  LIN1                         iOV_UpdatesCounter optional,
+  integer                      lengthOfExtendedAccessRestrictionData optional,
+  BIT1                         nRSRNA  optional,
+  BIT7                         spare5 optional,
+  octetstring                  additionalOctets  optional                                //"extendable" optional for backward compatibility
+}  with { 
+  variant (lengthIndicator) "LENGTHTO(ksi,dRXI,spare2,securityMode,sAMBRI,uAMBRI,uGIPAI,gUPII,iOVI,  
+  noofQuintuplets,usedGPRSIntegrityProtectionAlgorithm,spare4,ck,ik,quintuplets,     
+  drx_par,uplinkSubscribedUE_AMBR,downlinkSubscribedUE_AMBR,
+  uplinkUsedUE_AMBR,downlinkUsedUE_AMBR,lengthOfUE_NEtworkCapability,
+  uE_NEtworkCapability,lengthOfMS_NetworkCapability,mS_NetworkCapability, 
+  lengthOfMobileEquipmentIdentity,mobileEquipmentIdentity,
+  uNA,gENA,gANA,iNA,eNA,hNNA,nBNA,eCNA,
+  lengthOfVoiceDomainPreferenceAndUEsUsageSetting,
+  voiceDomainPreferenceAndUEsUsageSetting,
+  lengthOfHigherBitratesThan16Mbpsflags,
+  higherBitratesThan16Mbpsflags,iOV_UpdatesCounter,
+  lengthOfExtendedAccessRestrictionData,nRSRNA,spare5,
+  additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = '6A'O; )";   
+  variant (securityMode) "FIELDLENGTH(3)";  
+  variant (noofQuintuplets) "FIELDLENGTH(3)";
+  variant (noofQuintuplets) "LENGTHTO(quintuplets)";
+  variant (noofQuintuplets) "UNIT(elements)"; 
+  variant (drx_par) "PRESENCE (dRXI = '1'B; )";  
+  variant (lengthOfUE_NEtworkCapability) "LENGTHTO(uE_NEtworkCapability)";  
+  variant (lengthOfMS_NetworkCapability) "LENGTHTO(mS_NetworkCapability)";  
+  variant (lengthOfMobileEquipmentIdentity) "LENGTHTO(mobileEquipmentIdentity)";
+  variant (lengthOfVoiceDomainPreferenceAndUEsUsageSetting) "LENGTHTO(voiceDomainPreferenceAndUEsUsageSetting)";  
+  variant (lengthOfHigherBitratesThan16Mbpsflags) "LENGTHTO(higherBitratesThan16Mbpsflags)";  
+  variant (lengthOfExtendedAccessRestrictionData) "LENGTHTO(nRSRNA,spare5)";  
+  variant (uplinkSubscribedUE_AMBR) "PRESENCE (sAMBRI = '1'B; )";  
+  variant (downlinkSubscribedUE_AMBR) "PRESENCE (sAMBRI = '1'B; )";    
+  variant (uplinkUsedUE_AMBR) "PRESENCE (uAMBRI = '1'B; )";  
+  variant (downlinkUsedUE_AMBR) "PRESENCE (uAMBRI = '1'B; )";             
+  variant (iOV_UpdatesCounter) "PRESENCE (iOVI = '1'B; )";  
+};
+
+
+type record OldEPS_SecurityContext
+{
+  BIT3                         oldNCC,
+  BIT3                         oldKSI,
+  BIT1                         spare,
+  BIT1                         nHI_old,
+  octetstring                  old_K_asme length (32), 
+  octetstring                  old_NH length (32) optional 
+} with { 
+  variant (old_NH)  "PRESENCE(nHI_old = '1'B )"; 
+};
+
+type record EPS_SecurityContext_and_Quadruplets
+{
+  OCT1                         elementIdentifier,  // dec 107, '6B'O  
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare, 
+  BIT3                         ksi_asme,
+  BIT1                         dRXI,
+  BIT1                         nHI,
+  integer                      securityMode,  
+  BIT1                         osci,
+  BIT1                         uAMBRI,      
+  integer                      noofQuadruplets, 
+  integer                      noofQuintuplets, 
+  BIT4                         usedNAS_Cipher,
+  BIT3                         usedNAS_IntegrityAlgorithm,
+  BIT1                         sAMBRI,
+  integer                      nAS_DownlinkCount,
+  integer                      nAS_UplinkCount,
+  octetstring                  k_asme length (32), 
+  AuthQuadruplets              quadruplets,   
+  AuthQuintuplets              quintuplets,
+  OCT2                         drx_par optional, 
+  octetstring                  nH length (32) optional, 
+  BIT3                         nCC optional, 
+  BIT5                         spare4 optional,   
+  OCT4                         uplinkSubscribedUE_AMBR optional,
+  OCT4                         downlinkSubscribedUE_AMBR optional,
+  OCT4                         uplinkUsedUE_AMBR optional,
+  OCT4                         downlinkUsedUE_AMBR optional, 
+  integer                      lengthOfUE_NEtworkCapability,
+  octetstring                  uE_NEtworkCapability, 
+  integer                      lengthOfMS_NetworkCapability,
+  octetstring                  mS_NetworkCapability, 
+  integer                      lengthOfMobileEquipmentIdentity,
+  octetstring                  mobileEquipmentIdentity, 
+  BIT1                         uNA,
+  BIT1                         gENA,
+  BIT1                         gANA,
+  BIT1                         iNA,
+  BIT1                         eNA,
+  BIT1                         hNNA,
+  BIT1                         nBNA,
+  BIT1                         eCNA, 
+  OldEPS_SecurityContext       oldEPS_SecurityContext optional,               
+  integer                      lengthOfVoiceDomainPreferenceAndUEsUsageSetting optional, //"extendable" optional for backward compatibility
+  octetstring                  voiceDomainPreferenceAndUEsUsageSetting optional,         //"extendable" optional for backward compatibility
+  LIN2_BO_LAST                 lengthOfUERadioCapabilityforPagingInformation optional,   //"extendable" optional for backward compatibility
+  octetstring                  uERadioCapabilityforPagingInformation optional,           //"extendable" optional for backward compatibility
+  integer                      lengthOfExtendedAccessRestrictionData optional, //"extendable" optional for backward compatibility
+  BIT1                         nRSRNA optional,
+  BIT1                         uSSRNA optional,
+  BIT6                         spare5 optional,
+  integer                      lengthOfUEAdditionalSecurityCapability optional, //"extendable" optional for backward compatibility
+  octetstring                  uEAdditionalSecurityCapability optional,         //"extendable" optional for backward compatibility
+  octetstring                  additionalOctets  optional                                //"extendable" optional for backward compatibility   
+}  with { 
+  variant (lengthIndicator) "LENGTHTO(ksi_asme,dRXI,nHI,securityMode,osci,uAMBRI,noofQuadruplets, 
+  noofQuintuplets,usedNAS_Cipher,usedNAS_IntegrityAlgorithm,sAMBRI,
+  nAS_DownlinkCount,nAS_UplinkCount,k_asme, 
+  quadruplets,quintuplets,drx_par,nH,nCC,spare4, 
+  uplinkSubscribedUE_AMBR,downlinkSubscribedUE_AMBR,
+  uplinkUsedUE_AMBR,downlinkUsedUE_AMBR,lengthOfUE_NEtworkCapability,
+  uE_NEtworkCapability,lengthOfMS_NetworkCapability,mS_NetworkCapability, 
+  lengthOfMobileEquipmentIdentity,mobileEquipmentIdentity,
+  uNA,gENA,gANA,iNA,eNA,hNNA,nBNA,eCNA,
+  oldEPS_SecurityContext, 
+  lengthOfVoiceDomainPreferenceAndUEsUsageSetting,
+  voiceDomainPreferenceAndUEsUsageSetting,
+  lengthOfUERadioCapabilityforPagingInformation,
+  uERadioCapabilityforPagingInformation,
+  lengthOfExtendedAccessRestrictionData,nRSRNA, uSSRNA,spare5,
+  lengthOfUEAdditionalSecurityCapability,uEAdditionalSecurityCapability,
+  additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = '6B'O; )";   
+  variant (securityMode) "FIELDLENGTH(3)";  
+  variant (noofQuadruplets) "FIELDLENGTH(3)";
+  variant (noofQuadruplets) "LENGTHTO(quadruplets)";
+  variant (noofQuadruplets) "UNIT(elements)";      
+  variant (noofQuintuplets) "FIELDLENGTH(3)";
+  variant (noofQuintuplets) "LENGTHTO(quintuplets)";
+  variant (noofQuintuplets) "UNIT(elements)";      
+  variant (nAS_DownlinkCount)  "FIELDLENGTH(24)";
+  variant (nAS_DownlinkCount) "BYTEORDER(last)";     
+  variant (nAS_UplinkCount) "FIELDLENGTH(24)"; 
+  variant (nAS_UplinkCount) "BYTEORDER(last)";       
+  variant (lengthOfUE_NEtworkCapability) "LENGTHTO(uE_NEtworkCapability)";  
+  variant (lengthOfMS_NetworkCapability) "LENGTHTO(mS_NetworkCapability)";  
+  variant (lengthOfMobileEquipmentIdentity) "LENGTHTO(mobileEquipmentIdentity)";
+  variant (lengthOfVoiceDomainPreferenceAndUEsUsageSetting) "LENGTHTO(voiceDomainPreferenceAndUEsUsageSetting)";  
+  variant (lengthOfUERadioCapabilityforPagingInformation) "LENGTHTO(uERadioCapabilityforPagingInformation)";  
+  variant (lengthOfExtendedAccessRestrictionData) "LENGTHTO(nRSRNA,uSSRNA,spare5)";  
+  variant (lengthOfUEAdditionalSecurityCapability) "LENGTHTO(uEAdditionalSecurityCapability)";  
+  variant (drx_par) "PRESENCE(dRXI = '1'B)";
+  variant (nH)      "PRESENCE(nHI = '1'B)";
+  variant (nCC)     "PRESENCE(nHI = '1'B)";
+  variant (spare4)  "PRESENCE(nHI = '1'B)";   
+  variant (uplinkSubscribedUE_AMBR) "PRESENCE (sAMBRI = '1'B; )";  
+  variant (downlinkSubscribedUE_AMBR) "PRESENCE (sAMBRI = '1'B; )";    
+  variant (uplinkUsedUE_AMBR) "PRESENCE (uAMBRI = '1'B; )";  
+  variant (downlinkUsedUE_AMBR) "PRESENCE (uAMBRI = '1'B; )";      
+  variant (oldEPS_SecurityContext)  "PRESENCE(osci = '1'B )";                   
+}; 
+
+type record UMTS_Key_Quadruplets_and_Quintuplets
+{
+  OCT1                         elementIdentifier,   // dec 108, '6C'O  
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare, 
+  BIT3                         ksi_asme,
+  BIT1                         dRXI,
+  BIT1                         spare2,
+  integer                      securityMode, 
+  BIT1                         sAMBRI,
+  BIT1                         uAMBRI,
+  integer                      noofQuadruplets, 
+  integer                      noofQuintuplets,
+  OCT1                         spare4, 
+  OCT16                        ck,
+  OCT16                        ik,
+  AuthQuadruplets              quadruplets,   
+  AuthQuintuplets              quintuplets,  
+  OCT2                         drx_par optional,  
+  OCT4                         uplinkSubscribedUE_AMBR optional,
+  OCT4                         downlinkSubscribedUE_AMBR optional,
+  OCT4                         uplinkUsedUE_AMBR optional,
+  OCT4                         downlinkUsedUE_AMBR optional, 
+  integer                      lengthOfUE_NEtworkCapability,
+  octetstring                  uE_NEtworkCapability, 
+  integer                      lengthOfMS_NetworkCapability,
+  octetstring                  mS_NetworkCapability, 
+  integer                      lengthOfMobileEquipmentIdentity,
+  octetstring                  mobileEquipmentIdentity, 
+  BIT1                         uNA,
+  BIT1                         gENA,
+  BIT1                         gANA,
+  BIT1                         iNA,
+  BIT1                         eNA,
+  BIT1                         hNNA,
+  BIT1                         nBNA,
+  BIT1                         eCNA,  
+  integer                      lengthOfVoiceDomainPreferenceAndUEsUsageSetting optional,  //"extendable" optional for backward compatibility
+  octetstring                  voiceDomainPreferenceAndUEsUsageSetting optional,          //"extendable" optional for backward compatibility
+  octetstring                  additionalOctets  optional                                 //"extendable" optional for backward compatibility 
+}  with { 
+  variant (lengthIndicator) "LENGTHTO(ksi_asme,dRXI,spare2,securityMode,sAMBRI,uAMBRI, 
+  noofQuadruplets,noofQuintuplets,spare4,ck,
+  ik,quadruplets,quintuplets,drx_par,uplinkSubscribedUE_AMBR,
+  downlinkSubscribedUE_AMBR,uplinkUsedUE_AMBR,downlinkUsedUE_AMBR, 
+  lengthOfUE_NEtworkCapability,uE_NEtworkCapability, 
+  lengthOfMS_NetworkCapability,mS_NetworkCapability, 
+  lengthOfMobileEquipmentIdentity,mobileEquipmentIdentity,
+  uNA,gENA,gANA,iNA,eNA,hNNA,nBNA,eCNA,
+  lengthOfVoiceDomainPreferenceAndUEsUsageSetting,
+  voiceDomainPreferenceAndUEsUsageSetting,
+  additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = '6C'O; )";   
+  variant (securityMode) "FIELDLENGTH(3)";  
+  variant (noofQuadruplets) "FIELDLENGTH(3)";
+  variant (noofQuadruplets) "LENGTHTO(quadruplets)";
+  variant (noofQuadruplets) "UNIT(elements)";      
+  variant (noofQuintuplets) "FIELDLENGTH(3)";
+  variant (noofQuintuplets) "LENGTHTO(quintuplets)";
+  variant (noofQuintuplets) "UNIT(elements)";
+  variant (drx_par) "PRESENCE (dRXI = '1'B; )";
+  variant (lengthOfUE_NEtworkCapability) "LENGTHTO(uE_NEtworkCapability)";  
+  variant (lengthOfMS_NetworkCapability) "LENGTHTO(mS_NetworkCapability)";  
+  variant (lengthOfMobileEquipmentIdentity) "LENGTHTO(mobileEquipmentIdentity)";
+  variant (lengthOfVoiceDomainPreferenceAndUEsUsageSetting) "LENGTHTO(voiceDomainPreferenceAndUEsUsageSetting)";  
+  variant (uplinkSubscribedUE_AMBR) "PRESENCE (sAMBRI = '1'B; )";  
+  variant (downlinkSubscribedUE_AMBR) "PRESENCE (sAMBRI = '1'B; )";    
+  variant (uplinkUsedUE_AMBR) "PRESENCE (uAMBRI = '1'B; )";  
+  variant (downlinkUsedUE_AMBR) "PRESENCE (uAMBRI = '1'B; )"; 
+};   
+
+//8.39
+type set PDN_Conn_BearerContext_IEs
+{
+  EPS_BearerID                ePS_BearerID optional,
+  EPS_BearerLevel_TFT         ePS_Bearer_TFT optional, 
+  FullyQualifiedTEID_List     fullyQualifiedTEID optional, 
+  Bearer_QoS                  bearerLevel_QoS optional,
+  FullyQualifiedContainer     container optional, 
+  TransactionIdentifier       transactionIdentifier optional,
+  BearerFlags                 bearerFlags optional 
+}with {         
+  variant(fullyQualifiedTEID) "REPEATABLE(yes)";
+};         
+
+type record PDN_Conn_BearerContext
+{
+  OCT1                         elementIdentifier,// dec 93, '5D'O  
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,  
+  PDN_Conn_BearerContext_IEs   bearerContext_IEs
+} with { 
+  variant (lengthIndicator) "LENGTHTO(bearerContext_IEs)"; 
+  variant "PRESENCE (elementIdentifier = '5D'O; )";      
+};
+
+type set of PDN_Conn_BearerContext PDN_Conn_BearerContext_List
+
+type set PDN_Connection_IEs
+{
+  AccessPointName             accessPointName optional,
+  IP_Address_List             iP_Address optional,
+  EPS_BearerID                linkedEPS_Bearer_ID optional,
+  FullyQualifiedTEID          fullyQualifiedTEID optional,  
+  FullyQualifiedDomainName_List fullyQualifiedDomainName optional,
+  PDN_Conn_BearerContext_List bearerContexts optional, 
+  AggregateMaximumBitRate     apn_ambr optional,
+  ChargingCharacteristics     chargingCharacteristics optional,
+  APN_Restriction             aPN_Restriction optional,
+  SelectionMode               selectionMode optional,
+  ChangeReportingAction       changeReportingAction optional,
+  CSG_InformationReportingAction cSG_InformationReportingAction optional,
+  HeNBInformationReporting    heNBInformationReporting optional,
+  Indication                  indicationFlags optional,
+  SignallingPriorityIndication signallingPriorityIndication optional,
+  ChangeToReportFlags	        changeToReportFlags optional,
+  PresenceReportingAreaAction_List presenceReportingAreaAction optional,
+  WLANOffloadabilityIndication wLANOffloadabilityIndication optional,
+  RemoteUEContextGrouped_List  remoteUEContext optional,
+  PDN_Type                     pDN_Type optional,
+  HeaderCompressionConfiguration headerCompressionConfiguration optional
+} with { 
+  variant(iP_Address) "REPEATABLE(yes)";
+  variant(fullyQualifiedDomainName) "REPEATABLE(yes)";
+  variant(bearerContexts) "REPEATABLE(yes)";  
+  variant(presenceReportingAreaAction) "REPEATABLE(yes)";
+  variant(remoteUEContext) "REPEATABLE(yes)";
+};    
+
+type record PDN_ConnectionGrouped
+{
+  OCT1                         elementIdentifier,  // dec 109, '6D'O   
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,  
+  PDN_Connection_IEs           pDN_Connection_IEs
+} with { 
+  variant (lengthIndicator) "LENGTHTO(pDN_Connection_IEs)";
+  variant "PRESENCE (elementIdentifier = '6D'O; )";      
+};         
+
+type set of PDN_ConnectionGrouped PDN_ConnectionGrouped_List    
+
+//8.40
+type record PDU_Numbers
+{
+  OCT1                         elementIdentifier,  // dec 110, '6E'O  
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,  
+  BIT4                         nSAPI,
+  BIT4                         spare2,
+  integer                      dL_GTPU_SeqNumber, 
+  integer                      uL_GTPU_SeqNumber,
+  integer                      send_NPDU_Number,
+  integer                      receive_NPDU_Number, 
+  octetstring                  additionalOctets  optional
+} with { 
+  variant (lengthIndicator) "LENGTHTO(nSAPI,spare2,dL_GTPU_SeqNumber, 
+  uL_GTPU_SeqNumber,send_NPDU_Number,
+  receive_NPDU_Number,additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = '6E'O;)"; 
+  variant (dL_GTPU_SeqNumber) "FIELDLENGTH(16)";
+  variant (dL_GTPU_SeqNumber) "BYTEORDER(last)";  
+  variant (uL_GTPU_SeqNumber) "FIELDLENGTH(16)"; 
+  variant (uL_GTPU_SeqNumber) "BYTEORDER(last)";
+  variant (send_NPDU_Number) "FIELDLENGTH(16)";
+  variant (send_NPDU_Number) "BYTEORDER(last)";   
+  variant (receive_NPDU_Number) "FIELDLENGTH(16)"; 
+  variant (receive_NPDU_Number) "BYTEORDER(last)";         
+};
+
+//8.41
+type record Packet_TMSI
+{
+  OCT1                         elementIdentifier, // dec 111, '6F'O   
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,  
+  OCT4                         pTMSI_Value
+} with { 
+  variant (lengthIndicator) "LENGTHTO(pTMSI_Value)"; 
+  variant "PRESENCE (elementIdentifier = '6F'O; )";      
+};
+
+
+//8.42
+type record P_TMSI_Signature
+{
+  OCT1                         elementIdentifier, // dec 112, '70'O 
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,  
+  OCT3                         p_TMSI_SignatureValue     
+} with { 
+  variant (lengthIndicator) "LENGTHTO(p_TMSI_SignatureValue)"; 
+  variant "PRESENCE (elementIdentifier = '70'O; )";      
+};
+
+//8.43
+type record Hop_Counter
+{
+  OCT1                         elementIdentifier,  //dec 113, '71'O  
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,   
+  integer                      hopCounterValue,
+  octetstring                  additionalOctets  optional
+} with { 
+  variant (lengthIndicator) "LENGTHTO(hopCounterValue,additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = '71'O; )";      
+}; 
+
+//8.44
+type record UE_TimeZone
+{
+  OCT1                         elementIdentifier,  //dec 114, '72'O  
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,   
+  OCT1                         timeZone,
+  BIT2                         daylightSavingTime,
+  BIT6                         spare2,
+  octetstring                  additionalOctets  optional 
+} with { 
+  variant (lengthIndicator) "LENGTHTO(timeZone,daylightSavingTime,spare2,additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = '72'O; )";      
+}; 
+
+//8.45
+type record TraceReference
+{
+  OCT1                         elementIdentifier,  //dec 115, '73'O  
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,   
+  HEX1                         mccDigit1,
+  HEX1                         mccDigit2,
+  HEX1                         mccDigit3,
+  HEX1                         mncDigit3, 
+  HEX1                         mncDigit1,
+  HEX1                         mncDigit2,
+  OCT3                         traceID_Value
+} with { 
+  variant (lengthIndicator) "LENGTHTO(mccDigit1,mccDigit2,mccDigit3,mncDigit3,
+  mncDigit1,mncDigit2,traceID_Value)"; 
+  variant "PRESENCE (elementIdentifier = '73'O; )";      
+};
+
+//8.46
+type record CompleteRequestMessage 
+{ 
+  OCT1                         elementIdentifier,   //dec 116, '74'O   
+  LIN2_BO_LAST                 lengthIndicator, 
+  BIT4                         instance,
+  BIT4                         spare,    
+  integer                      completeRequestMessageType, 
+  octetstring                  completeRequestMessageValue 
+} with { 
+  variant (lengthIndicator) "LENGTHTO(completeRequestMessageType,completeRequestMessageValue)"; 
+  variant "PRESENCE (elementIdentifier = '74'O; )";      
+}; 
+
+//8.47
+type record GUTI
+{
+  OCT1                         elementIdentifier,   //dec 117, '75'O    
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,    
+  HEX1                         mccDigit1,
+  HEX1                         mccDigit2,
+  HEX1                         mccDigit3,
+  HEX1                         mncDigit3, 
+  HEX1                         mncDigit1,
+  HEX1                         mncDigit2,
+  OCT2                         mME_GroupID,
+  OCT1                         mME_Code,
+  octetstring                  m_TMSI
+} with { 
+  variant (lengthIndicator) "LENGTHTO(mccDigit1,mccDigit2,mccDigit3,mncDigit3, 
+  mncDigit1,mncDigit2,mME_GroupID,mME_Code,m_TMSI
+  )"; 
+  variant "PRESENCE (elementIdentifier = '75'O; )";        
+};
+
+//8.48
+type record FullyQualifiedContainer
+{
+  OCT1                         elementIdentifier,   //dec 118, '76'O     
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  integer                      containerType,
+  BIT4                         spare2,
+  F_ContainerField             f_ContainerField
+} with { 
+  variant (lengthIndicator) "LENGTHTO(containerType,spare2,f_ContainerField)"; 
+  variant "PRESENCE (elementIdentifier = '76'O; )"; 
+  variant (containerType) "FIELDLENGTH(4)";            
+  variant (f_ContainerField) "CROSSTAG(
+  uTRAN_TransparentContainer,    containerType = 1;
+  bSS_Container,                 containerType = 2; 
+  eUTRAN_TransparentContainer,   containerType = 3; 
+  nBIFOM_Container,              containerType = 4;
+  )";  
+};
+
+type union F_ContainerField
+{
+  BSS_Container_union bSS_Container,
+  octetstring uTRAN_TransparentContainer,
+  octetstring eUTRAN_TransparentContainer,
+  octetstring nBIFOM_Container
+}
+
+type set of FullyQualifiedContainer FullyQualifiedContainer_List;
+
+type union BSS_Container_union {
+  BSS_Container bSS_Container_structured,
+  octetstring bSS_Container_octet
+}
+
+//8.48-2
+type record BSS_Container
+{
+  BIT1    pFI,
+  BIT1    rP,
+  BIT1    sAPIflag,
+  BIT1    pHX,
+  BIT4    spare,
+  OCT1    packetFlowID optional,
+  BIT3    radioPriority optional,
+  BIT1    spare2 optional,
+  BIT4    sAPI optional,
+  integer xiDparametersLength optional,
+  octetstring xiDparameters optional
+} with {
+  variant "PRESENCE (spare = '0000'B; )";
+  variant (xiDparametersLength) "LENGTHTO(xiDparameters)"; 
+  variant (packetFlowID) "PRESENCE (pFI = '1'B; )";  
+  variant (radioPriority) "PRESENCE (rP = '1'B; )";  
+  variant (sAPI) "PRESENCE (sAPIflag = '1'B; )";  
+  variant (xiDparametersLength) "PRESENCE (pHX = '1'B; )";  
+  variant (xiDparameters) "PRESENCE (pHX = '1'B; )";  
+};
+
+//8.49
+type record FullyQualifiedCause
+{
+  OCT1                         elementIdentifier,   //dec 119, '77'O      
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare, 
+  BIT4                         causeType,
+  BIT4                         spare2,   
+  octetstring                  f_CauseFieldValue
+} with { 
+  variant (lengthIndicator) "LENGTHTO(causeType,spare2,f_CauseFieldValue)"; 
+  variant "PRESENCE (elementIdentifier = '77'O; )";            
+};
+
+type set of FullyQualifiedCause FullyQualifiedCause_List;
+
+//8.50
+type record PLMN_ID
+{
+  OCT1                         elementIdentifier,  //dec 120, '78'O    
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare, 
+  OCT3                         pLMN_IdentityValue   
+}with { 
+  variant (lengthIndicator) "LENGTHTO(pLMN_IdentityValue)"; 
+  variant "PRESENCE (elementIdentifier = '78'O; )";            
+};
+
+//8.51
+type record TargetIdentification
+{
+  OCT1                         elementIdentifier,  //dec 121, '79'O  
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare, 
+  integer                      targetType,
+  TargetId                     targetID
+} with { 
+  variant (lengthIndicator) "LENGTHTO(targetType,targetID)";
+  variant "PRESENCE (elementIdentifier = '79'O; )";
+  variant (targetID) "CROSSTAG( rnc_ID, targetType = 0;
+  macro_eNodeB_ID, targetType = 1;
+  cell_ID, targetType = 2;
+  home_eNodeB_ID, targetType = 3;
+  unknown, OTHERWISE)"
+};
+
+type union TargetId {
+  RNC_ID rnc_ID,
+  Macro_eNodeB_ID_TAC macro_eNodeB_ID,
+  Cell_ID cell_ID,
+  Home_eNodeB_ID_TAC home_eNodeB_ID, 
+  octetstring unknown
+}
+
+type octetstring RNC_ID;
+type octetstring Cell_ID;
+
+type record Macro_eNodeB_ID_TAC {
+  HEX1                         mccDigit1,
+  HEX1                         mccDigit2,
+  HEX1                         mccDigit3,
+  HEX1                         mncDigit3,
+  HEX1                         mncDigit1,
+  HEX1                         mncDigit2,
+  BIT4                         spare2,
+  bitstring                    targetID length(20),
+  OCT2                         tac
+} with { 
+  variant (spare2,targetID) "FIELDORDER(msb)";
+  variant (targetID) "BYTEORDER(last)";
+}
+
+type record Home_eNodeB_ID_TAC {
+  HEX1                         mccDigit1,
+  HEX1                         mccDigit2,
+  HEX1                         mccDigit3,
+  HEX1                         mncDigit3,
+  HEX1                         mncDigit1,
+  HEX1                         mncDigit2,
+  BIT4                         spare2,
+  bitstring                    targetID length(28),
+  OCT2                         tac
+} with { 
+  variant (spare2,targetID) "FIELDORDER(msb)";
+  variant (targetID) "BYTEORDER(last)";
+}
+
+// In Presence Reporting Area Action it shall be encoded as per octets 6 to 11 of the Target ID 
+type record Macro_eNodeB_ID {
+  HEX1                         mccDigit1,
+  HEX1                         mccDigit2,
+  HEX1                         mccDigit3,
+  HEX1                         mncDigit3,
+  HEX1                         mncDigit1,
+  HEX1                         mncDigit2,
+  BIT4                         spare2,
+  bitstring                    targetID length(20)
+} with { 
+  variant (spare2,targetID) "FIELDORDER(msb)";
+  variant (targetID) "BYTEORDER(last)";
+}
+
+// In Presence Reporting Area Action it shall be encoded as per octets 6 to 11 of the Target ID 
+type record Home_eNodeB_ID {
+  HEX1                         mccDigit1,
+  HEX1                         mccDigit2,
+  HEX1                         mccDigit3,
+  HEX1                         mncDigit3,
+  HEX1                         mncDigit1,
+  HEX1                         mncDigit2,
+  BIT4                         spare2,
+  bitstring                    targetID length(28)
+} with { 
+  variant (spare2,targetID) "FIELDORDER(msb)";
+  variant (targetID) "BYTEORDER(last)";
+}
+
+//8.52
+//VOID
+
+//8.53
+type record PacketFlowID
+{
+  OCT1                         elementIdentifier,  // dec 123, '7B'O 
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare, 
+  BIT4                         eBI,
+  BIT4                         spare2,
+  octetstring                  packetFlowIDValue
+} with { 
+  variant (lengthIndicator) "LENGTHTO(eBI,spare2,packetFlowIDValue)"; 
+  variant "PRESENCE (elementIdentifier = '7B'O;)";            
+};
+
+//8.54
+type record RAB_Context
+{
+  OCT1                         elementIdentifier,  // dec 124, '7C'O  
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,   
+  BIT4                         nSAPI,
+  BIT4                         spare2,
+  integer                      dL_GTPU_SeqNumber,
+  integer                      uL_GTPU_SeqNumber,
+  integer                      dL_PDCP_SeqNumber,
+  integer                      uL_PDCP_SeqNumber
+}with { 
+  variant (lengthIndicator) "LENGTHTO(nSAPI,spare2,dL_GTPU_SeqNumber,uL_GTPU_SeqNumber,dL_PDCP_SeqNumber,uL_PDCP_SeqNumber)"; 
+  variant "PRESENCE (elementIdentifier = '7C'O;)"; 
+  variant (dL_GTPU_SeqNumber) "FIELDLENGTH(16)"; 
+  variant (dL_GTPU_SeqNumber) "BYTEORDER(last)";   
+  variant (uL_GTPU_SeqNumber) "FIELDLENGTH(16)";
+  variant (uL_GTPU_SeqNumber) "BYTEORDER(last)";    
+  variant (dL_PDCP_SeqNumber) "FIELDLENGTH(16)";  
+  variant (dL_PDCP_SeqNumber) "BYTEORDER(last)";   
+  variant (uL_PDCP_SeqNumber) "FIELDLENGTH(16)"; 
+  variant (uL_PDCP_SeqNumber) "BYTEORDER(last)";                 
+};
+
+type set of RAB_Context RAB_Context_List
+
+//8.55
+type record Source_RNC_PDCP_Context_Info
+{
+  OCT1                         elementIdentifier,  // dec 125, '7D'O  
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare, 
+  octetstring                  rRC_ContainerValue
+} with { 
+  variant (lengthIndicator) "LENGTHTO(rRC_ContainerValue)"; 
+  variant "PRESENCE (elementIdentifier = '7D'O;)";            
+};
+
+//8.56
+type record PortNumber
+{
+  OCT1                         elementIdentifier, // dec 126, '7E'O   
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare, 
+  integer                      PortNumberValue,
+  octetstring                  additionalOctets optional
+} with { 
+  variant (lengthIndicator) "LENGTHTO(PortNumberValue,additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = '7E'O;)";
+  variant (PortNumberValue) "FIELDLENGTH(16)"; 
+  variant (PortNumberValue) "BYTEORDER(last)";              
+};
+
+type set of PortNumber PortNumber_List
+
+//8.57
+type record APN_Restriction
+{
+  OCT1                         elementIdentifier,  // dec 127, '7F'O   
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare, 
+  integer                      restrictionTypeValue,
+  octetstring                  additionalOctets optional
+} with { 
+  variant (lengthIndicator) "LENGTHTO(restrictionTypeValue,additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = '7F'O;)";            
+};
+
+//8.58
+type record SelectionMode
+{
+  OCT1                         elementIdentifier,   // dec 128, '80'O  
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare, 
+  integer                      selectionModeValue,
+  BIT6                         spare2,
+  octetstring                  additionalOctets optional 
+} with { 
+  variant (lengthIndicator) "LENGTHTO(selectionModeValue,spare2,additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = '80'O;)"; 
+  variant (selectionModeValue) "FIELDLENGTH(2)";              
+};
+
+//8.59
+type record SourceIdentification
+{
+  OCT1                         elementIdentifier,   // dec 129, '81'O  
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare, 
+  OCT8                         targetCellID,
+  OCT1                         sourceType,
+  HEX1                         mccDigit1,
+  HEX1                         mccDigit2,
+  HEX1                         mccDigit3,
+  HEX1                         mncDigit3,
+  HEX1                         mncDigit1,
+  HEX1                         mncDigit2,
+  BIT4                         spare2,
+  bitstring                    sourceID length(20),
+  OCT2                         tac
+} with { 
+  variant (lengthIndicator) "LENGTHTO(targetCellID,sourceType,mccDigit1,mccDigit2,mccDigit3,
+  mncDigit3,mncDigit1,mncDigit2,spare2,
+  sourceID,tac)"; 
+  variant "PRESENCE (elementIdentifier = '81'O;)";
+  variant (spare2,sourceID) "FIELDORDER(msb)";
+  variant (sourceID) "BYTEORDER(last)";
+};   
+
+//8.60
+//VOID
+
+//8.61
+type record ChangeReportingAction
+{
+  OCT1                         elementIdentifier, // dec 131, '83'O   
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare, 
+  octetstring                  actionValue
+} with { 
+  variant (lengthIndicator) "LENGTHTO(actionValue)"; 
+  variant "PRESENCE (elementIdentifier = '83'O;)";            
+};
+
+//8.62
+type set of OCT2 PDN_CSID_List;
+
+type union NodeID
+{
+  OCT4       globalUnicastIPv4,
+  OCT16      globalUnicastIPv6,
+  OCT4       fourOctets
+};
+
+type record FullyQualifiedPDN_ConnectionSetID   //FQ CSID
+{
+  OCT1                         elementIdentifier, // dec 132, '84'O 
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare, 
+  integer                      nRofCSIDs,
+  integer                      nodeIDType,
+  NodeID                       nodeID,
+  PDN_CSID_List                pDN_CSID_List,
+  octetstring                  additionalOctets optional 
+} with { 
+  variant (lengthIndicator) "LENGTHTO(nRofCSIDs,nodeIDType,nodeID,pDN_CSID_List,additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = '84'O;)";    
+  variant (nRofCSIDs) "FIELDLENGTH(4)"; 
+  variant (nRofCSIDs) "LENGTHTO(pDN_CSID_List)"; 
+  variant (nRofCSIDs) "UNIT(elements)";    
+  variant (nodeIDType) "FIELDLENGTH(4)";
+  variant (nodeID) "CROSSTAG(
+  globalUnicastIPv4,     nodeIDType = 0;
+  globalUnicastIPv6,     nodeIDType = 1; 
+  fourOctets,            nodeIDType = 2; 
+  )";  
+};
+
+type set of FullyQualifiedPDN_ConnectionSetID FullyQualifiedPDN_ConnectionSetID_List;
+
+//8.63
+type record ChannelNeeded
+{
+  OCT1                         elementIdentifier, // dec 133, '85'O  
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  octetstring                  channelNeededValue
+} with { 
+  variant (lengthIndicator) "LENGTHTO(channelNeededValue)"; 
+  variant "PRESENCE (elementIdentifier = '85'O;)";            
+};
+
+//8.64
+type record EMLPP_Priority
+{
+  OCT1                         elementIdentifier, // dec 134, '86'O   
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  octetstring                  eMLPP_PriorityValue               
+}with { 
+  variant (lengthIndicator) "LENGTHTO(eMLPP_PriorityValue)"; 
+  variant "PRESENCE (elementIdentifier = '86'O;)";            
+};
+
+//8.65
+type record NodeType
+{
+  OCT1                         elementIdentifier,// dec 135, '87'O    
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  OCT1                         nodeTypeValue, 
+  octetstring                  additionalOctets optional
+}with { 
+  variant (lengthIndicator) "LENGTHTO(nodeTypeValue,additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = '87'O;)";            
+};
+
+//8.66
+type record FullyQualifiedDomainName
+{
+  OCT1                         elementIdentifier,  // dec 136, '88'O
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,  
+  octetstring                  fQDN_Value
+} with { 
+  variant (lengthIndicator) "LENGTHTO(fQDN_Value)"; 
+  variant "PRESENCE (elementIdentifier = '88'O;)";
+};
+
+type set of FullyQualifiedDomainName FullyQualifiedDomainName_List;
+
+//8.67
+// Moved to GTPv2_PrivateExtensions.ttcn
+
+
+//8.68
+type record TransactionIdentifier
+{
+  OCT1                         elementIdentifier, // dec 137, '89'O
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  BIT4                         spare2,                  
+  L3_TransactionId             transactionIdentifierValue  
+} with { 
+  variant (lengthIndicator) "LENGTHTO(spare2,transactionIdentifierValue)"; 
+  variant "PRESENCE (elementIdentifier = '89'O;)";
+};
+
+type record L3_TransactionId
+{
+  BIT3               tio,
+  BIT1               tiFlag ,
+  TI_Extension       tIExtension  optional     
+  // an extension octet (TI) can be used for session management messages
+  // not yet implemented (see 24.008 clause 10.3.2 for more detail
+} with { variant (tIExtension) "PRESENCE(tio = '111'B)"
+};  
+
+type record TI_Extension
+{
+  BIT7               tI_Value,
+  BIT1               tI_ExtBit         //'1'B
+};
+
+//8.69
+type record MBMS_SessionDuration
+{
+  OCT1                         elementIdentifier, // dec 138, '8A'O
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  OCT3                         mBMS_SessionDurationValue,
+  octetstring                  additionalOctets optional
+}with { 
+  variant (lengthIndicator) "LENGTHTO(mBMS_SessionDurationValue,additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = '8A'O;)";            
+};
+
+//8.70
+type record MBMS_ServiceArea
+{
+  OCT1                         elementIdentifier, // dec 139, '8B'O
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  octetstring                  mBMS_ServiceAreaValue
+}with { 
+  variant (lengthIndicator) "LENGTHTO(mBMS_ServiceAreaValue)"; 
+  variant "PRESENCE (elementIdentifier = '8B'O;)";            
+};
+
+//8.71
+type record MBMS_SessionIdentifier
+{
+  OCT1                         elementIdentifier, // dec 140, '8C'O
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  OCT1                         mBMS_SessionIdentifierValue,
+  octetstring                  additionalOctets optional
+}with { 
+  variant (lengthIndicator) "LENGTHTO(mBMS_SessionIdentifierValue,additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = '8C'O;)";            
+};
+
+//8.72
+type record MBMS_FlowIdentifier
+{
+  OCT1                         elementIdentifier, // dec 141, '8D'O
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  OCT2                         mBMS_FlowIdentifierValue,
+  octetstring                  additionalOctets optional
+}with { 
+  variant (lengthIndicator) "LENGTHTO(mBMS_FlowIdentifierValue,additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = '8D'O;)";            
+};
+
+//8.73
+type record MBMS_IPMulticastDistribution
+{
+  OCT1                         elementIdentifier, // dec 142, '8E'O
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  OCT4                         commonTunnelEndpointIdentifierData,
+  GSN_Address                  iP_MulticastDistributionAddress,
+  GSN_Address                  iP_MulticastSourceAddress,
+  OCT1                         mBMS_HCIndicator,
+  octetstring                  additionalOctets optional
+}with { 
+  variant (lengthIndicator) "LENGTHTO(commonTunnelEndpointIdentifierData,iP_MulticastDistributionAddress,
+  iP_MulticastSourceAddress,mBMS_HCIndicator,additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = '8E'O;)";            
+};
+
+type set of MBMS_IPMulticastDistribution MBMS_IPMulticastDistribution_List;
+
+type record GSN_Address
+{ 
+  INT6b        lengthIndicator,
+  BIT2         addressType,
+  octetstring  addressValue 
+}with { 
+  variant (lengthIndicator) "LENGTHTO(addressValue)"; 
+};
+
+//8.74
+type record MBMS_DistributionAcknowledge
+{
+  OCT1                         elementIdentifier, // dec 143, '8F'O
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  BIT2                         distributionIndicationValue,
+  BIT6                         spare2,
+  octetstring                  additionalOctets optional
+}with { 
+  variant (lengthIndicator) "LENGTHTO(distributionIndicationValue,spare2,additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = '8F'O;)";            
+};
+
+//8.75
+type record User_CSG_Information
+{
+  OCT1                         elementIdentifier, // dec 145, '91'O
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  HEX1                         mccDigit1,
+  HEX1                         mccDigit2,
+  HEX1                         mccDigit3,
+  HEX1                         mncDigit3,
+  HEX1                         mncDigit1,
+  HEX1                         mncDigit2,
+  BIT5                         spare2,
+  bitstring                    cSG_ID length(27),
+  BIT1                         cMI,
+  BIT1                         lCSG,
+  BIT4                         spare3,
+  BIT2                         accessMode, 
+  octetstring                  additionalOctets optional
+}with { 
+  variant (lengthIndicator) "LENGTHTO(mccDigit1,mccDigit2,mccDigit3,
+  mncDigit3,mncDigit1,mncDigit2,
+  spare2,cSG_ID,cMI,lCSG,spare3,
+  accessMode,additionalOctets)"; 
+  variant (spare2,cSG_ID) "FIELDORDER(msb)";
+  variant (cSG_ID) "BYTEORDER(last)";
+  variant "PRESENCE (elementIdentifier = '91'O;)";            
+};
+
+//8.76
+type record CSG_InformationReportingAction
+{
+  OCT1                         elementIdentifier, // dec 146, '92'O
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  BIT1                         uCIC_SG,
+  BIT1                         uCIS_HC,
+  BIT1                         uCIU_HC,
+  BIT5                         spare2,
+  octetstring                  additionalOctets optional
+}with { 
+  variant (lengthIndicator) "LENGTHTO(uCIC_SG,uCIS_HC,uCIU_HC,spare2,additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = '92'O;)";            
+};
+
+//8.77
+type record of RFSP_Index RFSP_Index_List;
+
+type record RFSP_Index
+{
+  OCT1                         elementIdentifier, // dec 144, '90'O
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare, 
+  integer                      rFSP_IndexValue 
+}  with { 
+  variant (lengthIndicator) "LENGTHTO(rFSP_IndexValue)"; 
+  variant "PRESENCE (elementIdentifier = '90'O;)"; 
+  variant (rFSP_IndexValue) "FIELDLENGTH(16)"; 
+  variant (rFSP_IndexValue) "BYTEORDER(last)";    
+};
+
+//8.78
+type record CSG_ID
+{
+  OCT1                         elementIdentifier, // dec 147, '93'O
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare, 
+  BIT5                         spare2,
+  bitstring                    cSG_ID length(27),
+  octetstring                  additionalOctets optional
+}  with { 
+  variant (lengthIndicator) "LENGTHTO(spare2,cSG_ID,additionalOctets)"; 
+  variant (spare2,cSG_ID) "FIELDORDER(msb)";
+  variant (cSG_ID) "BYTEORDER(last)";
+  variant "PRESENCE (elementIdentifier = '93'O;)"; 
+};
+
+//8.79
+type record CSG_MembershipIndication
+{
+  OCT1                         elementIdentifier, // dec 148, '94'O
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare, 
+  BIT1                         cMI,
+  BIT7                         spare2,
+  octetstring                  additionalOctets optional
+}  with { 
+  variant (lengthIndicator) "LENGTHTO(cMI,spare2,additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = '94'O;)"; 
+};
+
+//8.80
+type record ServiceIndicator
+{
+  OCT1                         elementIdentifier, // dec 149, '95'O
+  LIN2_BO_LAST                 lengthIndicator,  //=1
+  BIT4                         instance,
+  BIT4                         spare, 
+  INT1                         serviceIndicator
+}  with { 
+  variant (lengthIndicator) "LENGTHTO(serviceIndicator)"; 
+  variant "PRESENCE (elementIdentifier = '95'O;)"; 
+};
+
+//8.81
+type record DetachType
+{
+  OCT1                         elementIdentifier, // dec 150, '96'O
+  LIN2_BO_LAST                 lengthIndicator,  //=1
+  BIT4                         instance,
+  BIT4                         spare, 
+  INT1                         detachType
+} with { 
+  variant (lengthIndicator) "LENGTHTO(detachType)"; 
+  variant "PRESENCE (elementIdentifier = '96'O;)"; 
+};
+
+//8.82
+type record LocalDistinguishedName
+{
+  OCT1                         elementIdentifier, // dec 151 '97'O
+  LIN2_BO_LAST                 lengthIndicator, 
+  BIT4                         instance,
+  BIT4                         spare,
+  charstring                   lDN length (1..400) 
+} with { 
+  variant (lengthIndicator) "LENGTHTO(lDN)"; 
+  variant "PRESENCE (elementIdentifier = '97'O;)"; 
+};
+
+type set of LocalDistinguishedName LocalDistinguishedName_List
+
+//8.83
+type record NodeFeatures
+{
+  OCT1                         elementIdentifier, // dec 152, '98'O
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare, 
+  BIT1                         pRN,
+  BIT1                         mABR,
+  BIT1                         nTSR,
+  BIT1                         cIOT,
+  BIT4                         spare2,
+  octetstring                  additionalOctets optional
+}with { 
+  variant (lengthIndicator) "LENGTHTO(pRN,mABR,nTSR,cIOT,spare2,additionalOctets)";
+  variant "PRESENCE (elementIdentifier = '98'O;)"; 
+};
+
+//8.84
+type record MBMSTimetoDataTransfer
+{
+  OCT1                         elementIdentifier, // dec 153, '99'O
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare, 
+  OCT1                         mBMSTimetoDataTransfervalue,
+  octetstring                  additionalOctets optional
+} with { 
+  variant (lengthIndicator) "LENGTHTO(mBMSTimetoDataTransfervalue, additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = '99'O;)"; 
+};
+
+//8.85
+type record Throttling
+{
+  OCT1                         elementIdentifier, // dec 154, '9A'O
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare, 
+  INT5b                        throttlingDelayValue,
+  BIT3                         throttlingDelayUnit,
+  INT1                         throttlingfactor,
+  octetstring                  additionalOctets optional 
+}with { 
+  variant (lengthIndicator) "LENGTHTO(throttlingDelayValue,throttlingDelayUnit,throttlingfactor,additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = '9A'O;)";  
+};
+
+
+//8.86
+type record AllocationRetentionPriority
+{
+  OCT1                         elementIdentifier, // dec 155, '9B'O
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare, 
+  BIT1                         pVI,
+  BIT1                         spare2,
+  BIT4                         pL,
+  BIT1                         pCI,
+  BIT1                         spare3,
+  octetstring                  additionalOctets optional
+} with { 
+  variant (lengthIndicator) "LENGTHTO(pVI,spare2,pL,pCI,spare3,additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = '9B'O;)"; 
+};
+
+//8.87
+type record EPC_Timer
+{
+  OCT1                         elementIdentifier, // dec 156, '9C'O
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare, 
+  INT5b                        timerValue,  
+  BIT3                         timerUnit,
+  octetstring                  additionalOctets optional
+} with { 
+  variant (lengthIndicator) "LENGTHTO(timerValue,timerUnit,additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = '9C'O;)"; 
+};
+
+//8.88
+type record SignallingPriorityIndication
+{
+  OCT1                         elementIdentifier, // dec 157, '9D'O
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare, 
+  BIT1                         lAPI,
+  BIT7                         spare2,
+  octetstring                  additionalOctets optional
+}with { 
+  variant (lengthIndicator) "LENGTHTO(lAPI,spare2,additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = '9D'O;)"; 
+};
+
+//8.89
+type record TMGI
+{
+  OCT1                         elementIdentifier, // dec 158, '9E'O
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare, 
+  OCT3                         mBMSServiceID,
+  HEX1                         mccDigit1,
+  HEX1                         mccDigit2,
+  HEX1                         mccDigit3,
+  HEX1                         mncDigit3,
+  HEX1                         mncDigit1,
+  HEX1                         mncDigit2,
+  octetstring                  additionalOctets optional
+} with { 
+  variant (lengthIndicator) "LENGTHTO(mBMSServiceID, mccDigit1,
+  mccDigit2, mccDigit3, mncDigit1,
+  mncDigit2, mncDigit3,
+  additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = '9E'O;)"; 
+};
+
+//8.90
+type record AdditionalMMContextForSRVCC
+{
+  OCT1                         elementIdentifier, // dec 159, '9F'O
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  integer                      mobileStationClassmark2Length,
+  MobileStationClassmark2      mobileStationClassmark2,
+  integer                      mobileStationClassmark3Length,
+  octetstring                  mobileStationClassmark3,
+  integer                      supportedCodecListLength,
+  SupportedCodecList           supportedCodecList,
+  octetstring                  additionalOctets optional 
+}with { 
+  variant (lengthIndicator) "LENGTHTO(mobileStationClassmark2Length,mobileStationClassmark2, 
+  mobileStationClassmark3Length,mobileStationClassmark3,
+  supportedCodecListLength,supportedCodecList,
+  additionalOctets)"; 
+  variant (mobileStationClassmark2Length) "LENGTHTO(mobileStationClassmark2)"; 
+  variant (mobileStationClassmark3Length) "LENGTHTO(mobileStationClassmark3)"; 
+  variant (supportedCodecListLength) "LENGTHTO(supportedCodecList)"; 
+  variant "PRESENCE (elementIdentifier = '9F'O;)";            
+};
+
+// 24.008/ 10.5.1.6 MobileStationClassmark2
+//4th octet:
+type record MobileStationClassmark2_oct4
+{
+  BIT1  fc,
+  BIT1  vgcs,
+  BIT1  vbs,
+  BIT1  sm_Capability,
+  BIT2  ss_ScreenIndicator,
+  BIT1  ps_Capability, 
+  BIT1  spare2_1 
+};
+
+
+//5th octet ( Table 10.5.6a ):
+type record MobileStationClassmark2_oct5
+{
+  BIT1  a5_2, 
+  BIT1  a5_3,
+  BIT1  cmsp,
+  BIT1  solsa,
+  BIT1  ucs2,
+  BIT1  lcsva_cap,
+  BIT1  spare5_7,
+  BIT1  cm3
+};
+
+type record MobileStationClassmark2
+{
+  BIT3  rf_PowerCapability,
+  BIT1  a5_1,
+  BIT1  esind,
+  BIT2  revisionLevel, 
+  BIT1  spare1_1, 
+  MobileStationClassmark2_oct4  mobileStationClassmark2_oct4    optional,
+  MobileStationClassmark2_oct5  mobileStationClassmark2_oct5    optional
+};
+
+
+// TS 24008/10.5.4.32 Supported Codec List
+type record Codec
+{
+  OCT1  systemIdentification,
+  integer  lengthOfBitmap,
+  OCT1  codecBitmap_bits1to8,
+  OCT1  codecBitmap_bits9to16 optional,
+  octetstring additional_codecs optional
+} with {
+  variant (lengthOfBitmap) "LENGTHTO(codecBitmap_bits1to8,codecBitmap_bits9to16,additional_codecs)"; 
+}; 
+
+type record of Codec SupportedCodecList; 
+
+//8.91
+type record AdditionalFlagsForSRVCC
+{
+  OCT1                         elementIdentifier, // dec 160, 'A0'O
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare, 
+  BIT1                         iCS,
+  BIT7                         spare2,
+  octetstring                  additionalOctets optional
+} with { 
+  variant (lengthIndicator) "LENGTHTO(iCS, spare2, additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = 'A0'O;)"; 
+};
+
+// Sv Information Elements
+// 3GPP TS 29.280 6.2
+type record STN_SR
+{
+  OCT1                         elementIdentifier, // dec 51, '33'O
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  OCT1                         nanpi,
+  hexstring                    sTN_SR_Value
+}with { 
+  variant (lengthIndicator) "LENGTHTO(nanpi,sTN_SR_Value)";
+  variant "PRESENCE (elementIdentifier = '33'O;)";  
+  variant (sTN_SR_Value) "PADDING(yes)";
+  variant (sTN_SR_Value) "PADDING_PATTERN('1'B)";          
+};
+
+//8.92 Void
+/*type record MMBR
+{
+  OCT1                         elementIdentifier, // dec 161, 'A1'O
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  OCT4                         maxMMBR_for_uplink, 
+  OCT4                         maxMMBR_for_downlink,
+  octetstring                  additionalOctets optional
+}with { 
+  variant (lengthIndicator) "LENGTHTO(maxMMBR_for_uplink,maxMMBR_for_downlink,additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = 'A1'O;)"; 
+};*/
+
+
+//8.93
+type record MDT_Configuration
+{
+  OCT1                         elementIdentifier, // dec 162, 'A2'O
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  OCT1                         jobType,
+  OCT4                         listOfmeasurements,
+  OCT1                         reportingTrigger,
+  OCT1                         reportInterval,
+  OCT1                         reportAmount,
+  OCT1                         eventThresholdforRSRP,  
+  OCT1                         eventThresholdforRSRQ,
+  INT1                         lengthOfAreaScope,
+  octetstring                  areaScope optional,
+  BIT1                         cRRMI,
+  BIT1                         mPI,
+  BIT1                         pMI,
+  BIT1                         pLI,
+  BIT4                         spare2,
+  CollectionPeriodforRRMmeasurementsLTE collectionPeriodforRRMmeasurementsLTE optional,
+  MeasurementPeriodLTE         measurementPeriodLTE optional,
+  PositioningMethod            positioningMethod optional,
+  INT1                         numberOfMDT_PLMNs optional,
+  MDT_PLMN_List                mDT_PLMN_List length(0..16) optional,
+  octetstring                  additionalOctets optional
+}with { 
+  variant (lengthIndicator) "LENGTHTO(jobType,listOfmeasurements,reportingTrigger,
+  reportInterval,reportAmount,eventThresholdforRSRP,
+  eventThresholdforRSRQ,lengthOfAreaScope,areaScope,
+  cRRMI,mPI,pMI,pLI,spare2,
+  collectionPeriodforRRMmeasurementsLTE,measurementPeriodLTE,positioningMethod,
+  numberOfMDT_PLMNs,mDT_PLMN_List,additionalOctets )"; 
+  variant "PRESENCE (elementIdentifier = 'A2'O;)"; 
+  variant (lengthOfAreaScope) "LENGTHTO(areaScope)";  
+  variant (collectionPeriodforRRMmeasurementsLTE) "PRESENCE(cRRMI = '1'B)";   
+  variant (measurementPeriodLTE) "PRESENCE(mPI = '1'B)";   
+  variant (positioningMethod) "PRESENCE(pMI = '1'B)";   
+  variant (mDT_PLMN_List) "PRESENCE(pLI = '1'B)";   
+  variant (numberOfMDT_PLMNs) "PRESENCE(pLI = '1'B)";   
+  variant (numberOfMDT_PLMNs) "LENGTHTO(mDT_PLMN_List)";  
+  variant (numberOfMDT_PLMNs) "UNIT(elements)"; 
+};
+
+//5.10.19 3GPP TS 32.422
+type record PositioningMethod
+{
+  BIT1 gNSS,
+  BIT1  eCellID,
+  BIT6  spare
+}
+//5.10.20 3GPP TS 32.422
+type enumerated CollectionPeriodforRRMmeasurementsLTE
+{
+  ms1024 (0),
+  ms1280 (1),
+  ms2048 (2),
+  ms2560 (3),
+  ms5120 (4),
+  ms10240 (5),
+  min1 (6)
+} with { variant "FIELDLENGTH(8)"; }
+
+//5.10.23 3GPP TS 32.422
+type enumerated MeasurementPeriodLTE
+{
+  ms1024 (0),
+  ms1280 (1),
+  ms2048 (2),
+  ms2560 (3),
+  ms5120 (4),
+  ms10240 (5),
+  min1 (6)
+} with { variant "FIELDLENGTH(8)"; }
+
+//9.2.1.89, 9.2.3.8 TS 32.422
+type record of OCT3 MDT_PLMN_List;
+
+//8.94
+type record APCO
+{
+  OCT1                         elementIdentifier, // dec 163, 'A3'O
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare,
+  BIT3                         configProtocol,
+  BIT4                         spare2,  //'0000'B
+  BIT1                         extensionField,   //'1'B
+  ProtocolIDs_and_ContainerIDs protocolIDs_and_ContainerIDs optional,
+  octetstring                  additionalOctets optional    
+}with { 
+  variant (lengthIndicator) "LENGTHTO(configProtocol,spare2,extensionField,protocolIDs_and_ContainerIDs,additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = 'A3'O;)";  
+};
+
+//8.95
+type record AbsoluteTimeofMBMSDataTransfer
+{
+  OCT1                         elementIdentifier, // dec 164, 'A4'O
+  LIN2_BO_LAST                 lengthIndicator,
+  BIT4                         instance,
+  BIT4                         spare, 
+  OCT8                         value_part,
+  octetstring                  additionalOctets optional
+} with { 
+  variant (lengthIndicator) "LENGTHTO( value_part, additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = 'A4'O;)"; 
+};
+
+//8.96
+type record HeNBInformationReporting
+{
+  OCT1            elementIdentifier, // dec 165, 'A5'O
+  LIN2_BO_LAST    lengthIndicator,
+  BIT4            instance,
+  BIT4            spare,
+  BIT1            FTI,
+  BIT7            spare2,
+  octetstring     additionalOctets optional
+}with { 
+  variant (lengthIndicator) "LENGTHTO(FTI,spare2,additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = 'A5'O;)"; 
+};
+
+//8.97
+type record IPv4ConfigurationPrameters
+{
+  OCT1            elementIdentifier, // dec 166, 'A6'O
+  LIN2_BO_LAST    lengthIndicator,
+  BIT4            instance,
+  BIT4            spare,
+  INT1            subnetPrefixLength,
+  OCT4            iPv4DefaultRouterAddress,
+  octetstring     additionalOctets optional
+}with { 
+  variant (lengthIndicator) "LENGTHTO(subnetPrefixLength,iPv4DefaultRouterAddress,additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = 'A6'O;)"; 
+}
+
+//8.98
+type record ChangeToReportFlags
+{
+  OCT1            elementIdentifier, // dec 167, 'A7'O
+  LIN2_BO_LAST    lengthIndicator,
+  BIT4            instance,
+  BIT4            spare,
+  BIT1            servingNetworkChangeToReport,
+  BIT1            timeZoneChangeToReport,
+  BIT6            spare2, //'000000'B
+  octetstring     additionalOctets optional
+}with { 
+  variant (lengthIndicator) "LENGTHTO(servingNetworkChangeToReport,timeZoneChangeToReport,spare2,additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = 'A7'O;)"; 
+}
+
+
+//8.99
+type record ActionIndication
+{
+  OCT1            elementIdentifier, // dec 168, 'A8'O
+  LIN2_BO_LAST    lengthIndicator,
+  BIT4            instance,
+  BIT4            spare,
+  BIT3            indication,
+  BIT5            spare2,
+  octetstring     additionalOctets optional
+}with { 
+  variant (lengthIndicator) "LENGTHTO(indication,spare2,additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = 'A8'O;)"; 
+}
+
+//8.100
+type record TrustedWLANAccessNetworkIdentifier
+{
+  OCT1            elementIdentifier,	//dec 169, 'A9'O
+  LIN2_BO_LAST    lengthIndicator,
+  BIT4            instance,
+  BIT4            spare,
+  BIT1            bssIdIndicator,
+  BIT1            cIVAI,
+  BIT1            pLMNI,
+  BIT1            oPNAI,
+  BIT1            lAAI,
+  BIT3            spare2,
+  INT1            lengthOfSSID,
+  octetstring     SSID,
+  OCT6            BSSID optional,
+  INT1            lengthOfCivicAddress optional,
+  octetstring     civicAddressInformation optional,
+  OCT4            tWAN_PLMNID optional,
+  INT1            lengthOfTWANOperatorName optional,
+  octetstring     tWANOperatorName optional,
+  INT1            relayIdentityType optional,
+  INT1            lengthOfRelayIdentity optional,
+  octetstring     relayIdentity optional,
+  INT1            lengthOfcircuitID optional,
+  octetstring     circuitID optional,
+  octetstring     additionalOctets optional
+}with { 
+  variant (lengthIndicator) "LENGTHTO(bssIdIndicator,cIVAI,pLMNI,oPNAI,lAAI,spare2,
+  lengthOfSSID,SSID,BSSID,additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = 'A9'O;)";
+  variant (lengthOfSSID) "LENGTHTO(SSID)"; 
+  variant (civicAddressInformation) "PRESENCE(cIVAI = '1'B)";   
+  variant (lengthOfCivicAddress) "PRESENCE(cIVAI = '1'B)";   
+  variant (lengthOfCivicAddress) "LENGTHTO(civicAddressInformation)"; 
+  variant (tWAN_PLMNID) "PRESENCE(pLMNI = '1'B)";   
+  variant (tWANOperatorName) "PRESENCE(oPNAI = '1'B)";   
+  variant (lengthOfTWANOperatorName) "PRESENCE(oPNAI = '1'B)";   
+  variant (lengthOfTWANOperatorName) "LENGTHTO(tWANOperatorName)"; 
+  variant (relayIdentityType) "PRESENCE(lAAI = '1'B)";   
+  variant (lengthOfRelayIdentity) "PRESENCE(lAAI = '1'B)";   
+  variant (relayIdentity) "PRESENCE(lAAI = '1'B)";   
+  variant (lengthOfcircuitID) "PRESENCE(lAAI = '1'B)";   
+  variant (circuitID) "PRESENCE(lAAI = '1'B)";   
+  variant (lengthOfRelayIdentity) "LENGTHTO(relayIdentity)"; 
+  variant (lengthOfcircuitID) "LENGTHTO(circuitID)";
+};
+
+type set of TrustedWLANAccessNetworkIdentifier TrustedWLANAccessNetworkIdentifier_List;
+
+//8.101
+type record UserLocationInformationTimestamp
+{
+  OCT1          elementIdentifier,	//dec 170, 'AA'O
+  LIN2_BO_LAST  lengthIndicator,
+  BIT4          instance,
+  BIT4          spare,
+  OCT4          timestampValue,
+  octetstring   additionalOctets optional
+}with { 
+  variant (lengthIndicator) "LENGTHTO(timestampValue, additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = 'AA'O;)";
+}
+
+//8.102
+type record MBMSFlags
+{
+  OCT1          elementIdentifier,	//dec 171, 'AB'O
+  LIN2_BO_LAST  lengthIndicator,
+  BIT4          instance,
+  BIT4          spare,
+  BIT1          mSRI,
+  BIT1          lMR,
+  BIT6          spare2,
+  octetstring   additionalOctets optional
+}with { 
+  variant (lengthIndicator) "LENGTHTO(mSRI,lMR,spare2,additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = 'AB'O;)";
+}
+
+//8.103
+type record RAN_NASCause
+{
+  OCT1          elementIdentifier,	//dec 172, 'AC'O
+  LIN2_BO_LAST  lengthIndicator,
+  BIT4          instance,
+  BIT4          spare,
+  BIT4          causeType,
+  BIT4          protocolType,
+  OCT1          causeValue,
+  octetstring   additionalOctets optional
+}with { 
+  variant (lengthIndicator) "LENGTHTO(causeType, protocolType, causeValue, additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = 'AC'O;)";
+}
+
+type set of RAN_NASCause RAN_NASCause_List;
+
+//8.104
+type record CNOperatorSelectionEntity
+{
+  OCT1          elementIdentifier,	//dec 173, 'AD'O
+  LIN2_BO_LAST  lengthIndicator,
+  BIT4          instance,
+  BIT4          spare,
+  BIT2          selectionEntity,
+  BIT6          spare2,
+  octetstring   additionalOctets optional
+}with { 
+  variant (lengthIndicator) "LENGTHTO(selectionEntity, spare2, additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = 'AD'O;)";
+}
+
+//8.105
+type record TrustedWLANModeIndication
+{
+  OCT1          elementIdentifier,	//dec 174, 'AE'O
+  LIN2_BO_LAST  lengthIndicator,
+  BIT4          instance,
+  BIT4          spare,
+  BIT1          sCM,
+  BIT1          mCM,
+  BIT6          spare2,
+  octetstring   additionalOctets optional
+}with { 
+  variant (lengthIndicator) "LENGTHTO(sCM, mCM, spare2, additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = 'AE'O;)";
+}
+
+//8.106
+type record NodeNumber
+{
+  OCT1          elementIdentifier,	//dec 175, 'AF'O
+  LIN2_BO_LAST  lengthIndicator,
+  BIT4          instance,
+  BIT4          spare,
+  LIN1          lenghOfNodeNumber,
+  octetstring   nodeNumber,
+  octetstring   additionalOctets optional
+}with { 
+  variant (lengthIndicator) "LENGTHTO(lenghOfNodeNumber, nodeNumber, additionalOctets)"; 
+  variant (lenghOfNodeNumber) "LENGTHTO(nodeNumber)"; 
+  variant "PRESENCE (elementIdentifier = 'AF'O;)";
+}
+
+type set of NodeNumber NodeNumber_List;
+
+//8.107
+type record NodeIdentifier
+{
+  OCT1          elementIdentifier,	//dec 176, 'B0'O
+  LIN2_BO_LAST  lengthIndicator,
+  BIT4          instance,
+  BIT4          spare,
+  LIN1          lenghOfNodeName,
+  octetstring   nodeName,
+  LIN1          lenghOfNodeRealm,
+  octetstring   nodeRealm,
+  octetstring   additionalOctets optional
+}with { 
+  variant (lengthIndicator) "LENGTHTO(lenghOfNodeName,nodeName,lenghOfNodeRealm,nodeRealm, additionalOctets)"; 
+  variant (lenghOfNodeName) "LENGTHTO(nodeName)"; 
+  variant (lenghOfNodeRealm) "LENGTHTO(nodeRealm)"; 
+  variant "PRESENCE (elementIdentifier = 'B0'O;)";
+}
+
+type set of NodeIdentifier NodeIdentifier_List;
+  
+//8.108
+type record PresenceReportingAreaAction
+{
+  OCT1            elementIdentifier,	//dec 177, 'B1'O
+  LIN2_BO_LAST    lengthIndicator,
+  BIT4            instance,
+  BIT4            spare,
+  BIT3            actionField,
+  BIT1            iNAPRA,
+  BIT4            spare2,
+  OCT3            presenceReportingAreaIdentifier optional,
+  INT4b           numberOfRAI (0..15) optional,
+  INT4b           numberOfTAI (0..15) optional,
+  INT6b           numberOfMacroENodeB (0..63) optional,
+  BIT2            spare3 optional,
+  INT6b           numberOfHomeENodeB (0..63) optional,
+  BIT2            spare4 optional,
+  INT6b           numberOfECGI (0..63) optional,
+  BIT2            spare5 optional,
+  INT6b           numberOfSAI (0..63) optional,
+  BIT2            spare6 optional,
+  INT6b           numberOfCGI (0..63) optional,
+  BIT2            spare7 optional,
+  TAIList         tAIs optional,
+  Macro_eNB_ID_List  macroENBIDs optional,
+  Home_eNB_ID_List  homeENBIDs optional,
+  ECGIList        eCGIs optional,
+  RAIList         rAIs optional,
+  SAIList         sAIs optional,
+  CGIList         cGIs optional,
+  INT6b           numberOfExtendedMacroENODEB (0..63) optional,
+  BIT2            spare8 optional,
+  ExtendedMacro_eNB_ID_List  extendedMacroENBIDs optional,
+  octetstring     additionalOctets optional
+}with { 
+  variant (lengthIndicator) "LENGTHTO(actionField,iNAPRA,spare2,presenceReportingAreaIdentifier,numberOfRAI,numberOfTAI,numberOfMacroENodeB,
+  spare3,numberOfHomeENodeB,spare4,numberOfECGI,spare5,numberOfSAI,spare6,numberOfCGI,spare7,tAIs,macroENBIDs,homeENBIDs,
+  eCGIs,rAIs,sAIs,cGIs,numberOfExtendedMacroENODEB,spare8,extendedMacroENBIDs,additionalOctets)"; 
+  variant (numberOfRAI) "LENGTHTO(rAIs)";
+  variant (numberOfRAI) "UNIT(elements)"; 
+  variant (numberOfTAI) "LENGTHTO(tAIs)";
+  variant (numberOfTAI) "UNIT(elements)"; 
+  variant (numberOfMacroENodeB) "LENGTHTO(macroENBIDs)";
+  variant (numberOfMacroENodeB) "UNIT(elements)"; 
+  variant (numberOfHomeENodeB) "LENGTHTO(homeENBIDs)";
+  variant (numberOfHomeENodeB) "UNIT(elements)"; 
+  variant (numberOfECGI) "LENGTHTO(eCGIs)";
+  variant (numberOfECGI) "UNIT(elements)"; 
+  variant (numberOfSAI) "LENGTHTO(sAIs)";
+  variant (numberOfSAI) "UNIT(elements)"; 
+  variant (numberOfCGI) "LENGTHTO(cGIs)";
+  variant (numberOfCGI) "UNIT(elements)"; 
+  variant (numberOfExtendedMacroENODEB) "LENGTHTO(extendedMacroENBIDs)";
+  variant (numberOfExtendedMacroENODEB) "UNIT(elements)"; 
+  variant "PRESENCE (elementIdentifier = 'B1'O;)";
+}
+
+type set of PresenceReportingAreaAction PresenceReportingAreaAction_List;
+
+type set of TAI TAIList;
+type set of ECGI ECGIList;
+type set of RAI RAIList;
+type set of SAI SAIList;
+type set of CGI CGIList;
+type set of Macro_eNodeB_ID Macro_eNB_ID_List;
+type set of Home_eNodeB_ID Home_eNB_ID_List;
+type set of ExtendedMacro_eNodeB_ID ExtendedMacro_eNB_ID_List;
+
+//8.109
+type record PresenceReportingAreaInformation
+{
+  OCT1          elementIdentifier,	//dec 178, 'B2'O
+  LIN2_BO_LAST  lengthIndicator,
+  BIT4          instance,
+  BIT4          spare,
+  OCT3          presenceReportingAreaIdentifier,
+  BIT1          iPRA,
+  BIT1          oPRA,
+  BIT1          aPRA,
+  BIT1          iNAPRA,
+  BIT4          spare2,
+  AdditionalPRA additionalPRA optional,
+  octetstring   additionalOctets optional
+}with { 
+  variant (lengthIndicator) "LENGTHTO(presenceReportingAreaIdentifier,iPRA,oPRA,aPRA,iNAPRA, spare2,additionalPRA, additionalOctets)"; 
+  variant (additionalPRA) "PRESENCE(iNAPRA = '0'B)";   
+  variant (additionalPRA) "PRESENCE(aPRA = '1'B)";   
+  variant "PRESENCE (elementIdentifier = 'B2'O;)";
+}
+
+type set of PresenceReportingAreaInformation PresenceReportingAreaInformation_List;
+
+
+type record AdditionalPRA
+{
+  OCT3 additionalPRA_Identifier,
+  BIT1 iPRA,
+  BIT1 oPRA,
+  BIT1 aPRA,
+  BIT5 spare,
+  AdditionalPRA additionalPRA optional
+}with { 
+  variant (additionalPRA) "PRESENCE(aPRA = '1'B)";   
+}
+
+//8.110
+type record TWANIdentifierTimestamp
+{
+  OCT1          elementIdentifier,	//dec 179, 'B3'O
+  LIN2_BO_LAST  lengthIndicator,
+  BIT4          instance,
+  BIT4          spare,
+  OCT4          tWANIdentifierTimestampValue,
+  octetstring   additionalOctets optional
+}with { 
+  variant (lengthIndicator) "LENGTHTO(tWANIdentifierTimestampValue, additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = 'B3'O;)";
+}
+
+type set of TWANIdentifierTimestamp TWANIdentifierTimestamp_List
+  
+//8.111
+type record OverloadControlInformationGrouped
+{
+  OCT1          elementIdentifier,	//dec 180, 'B4'O
+  LIN2_BO_LAST  lengthIndicator,
+  BIT4          instance,
+  BIT4          spare,
+  OverloadControlInformationIEs overloadControlInformationIEs
+}with { 
+  variant (lengthIndicator) "LENGTHTO(overloadControlInformationIEs)"; 
+  variant "PRESENCE (elementIdentifier = 'B4'O;)";
+}
+
+type set OverloadControlInformationIEs
+{
+  SequenceNumber  overloadControlSequenceNumber optional,
+  Metric          overloadReductionMetric optional,
+  EPC_Timer       periodOfValidity optional,
+  AccessPointName listOfAccessPointName optional
+} 
+
+type set of OverloadControlInformationGrouped OverloadControlInformationGrouped_List;
+
+//8.112
+type record LoadControlInformationGrouped
+{
+  OCT1          elementIdentifier,	//dec 181, 'B5'O
+  LIN2_BO_LAST  lengthIndicator,
+  BIT4          instance,
+  BIT4          spare,
+  LoadControlInformationIEs loadControlInformationIEs
+}with { 
+  variant (lengthIndicator) "LENGTHTO(loadControlInformationIEs)"; 
+  variant "PRESENCE (elementIdentifier = 'B5'O;)";
+}
+
+type set LoadControlInformationIEs
+{
+  SequenceNumber  loadControlSequenceNumber optional,
+  Metric          loadMetric optional,
+  APNandRelativeCapacity  listOfAPNandRelativeCapacity optional
+}
+
+type set of LoadControlInformationGrouped LoadControlInformationGrouped_List;
+
+//8.113
+type record Metric
+{
+  OCT1          elementIdentifier,	//dec 182, 'B6'O
+  LIN2_BO_LAST  lengthIndicator (1),
+  BIT4          instance,
+  BIT4          spare,
+  LIN1          metric (0..100)
+}with { 
+  variant (lengthIndicator) "LENGTHTO(metric)"; 
+  variant "PRESENCE (elementIdentifier = 'B6'O;)";
+}
+
+//8.114
+type record SequenceNumber
+{
+  OCT1          elementIdentifier,	//dec 183, 'B7'O
+  LIN2_BO_LAST  lengthIndicator (4),
+  BIT4          instance,
+  BIT4          spare,
+  LIN4_BO_LAST  sequenceNumber
+}with { 
+  variant (lengthIndicator) "LENGTHTO(sequenceNumber)"; 
+  variant "PRESENCE (elementIdentifier = 'B7'O;)";
+}
+
+//8.115
+type record APNandRelativeCapacity
+{
+  OCT1            elementIdentifier,	//dec 184, 'B8'O
+  LIN2_BO_LAST    lengthIndicator,
+  BIT4            instance,
+  BIT4            spare,
+  LIN1            relativeCapacity (0..100),
+  LIN1            aPNLength,
+  AccessPointName accessPointName,
+  octetstring     additionalOctets optional
+}with { 
+  variant (lengthIndicator) "LENGTHTO(relativeCapacity,aPNLength,accessPointName, additionalOctets)"; 
+  variant (aPNLength) "LENGTHTO(accessPointName)"; 
+  variant "PRESENCE (elementIdentifier = 'B8'O;)";
+}
+
+//8.116
+type record WLANOffloadabilityIndication
+{
+  OCT1            elementIdentifier,	//dec 185, 'B9'O
+  LIN2_BO_LAST    lengthIndicator,
+  BIT4            instance,
+  BIT4            spare,
+  BIT1            uTRANIndication,
+  BIT1            eUTRANIndication,
+  BIT6            spare2,
+  octetstring     additionalOctets optional
+}with { 
+  variant (lengthIndicator) "LENGTHTO(uTRANIndication, eUTRANIndication, spare2, additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = 'B9'O;)";
+}
+
+//8.117
+type record PagingAndServiceInformation
+{
+  OCT1            elementIdentifier,	//dec 186, 'BA'O
+  LIN2_BO_LAST    lengthIndicator,
+  BIT4            instance,
+  BIT4            spare,
+  integer         ePS_Bearer_ID_Value,
+  BIT4            spare2,
+  BIT1            pPI,
+  BIT7            spare3,
+  BIT6            pagingPolicyIndicationValue optional,
+  BIT2            spare4 optional,
+  octetstring     additionalOctets optional
+}with { 
+  variant (lengthIndicator) "LENGTHTO(ePS_Bearer_ID_Value,spare2,pPI,spare3,pagingPolicyIndicationValue,spare4,additionalOctets)"; 
+  variant(ePS_Bearer_ID_Value) "FIELDLENGTH(4)"; 
+  variant "PRESENCE (elementIdentifier = 'BA'O;)";
+  variant (pagingPolicyIndicationValue) "PRESENCE(pPI = '1'B)";   
+  variant (spare4) "PRESENCE(pPI = '1'B)";   
+}
+
+//8.118
+type record IntegerNumber
+{
+  OCT1            elementIdentifier,	//dec 187, 'BB'O
+  LIN2_BO_LAST    lengthIndicator,
+  BIT4            instance,
+  BIT4            spare,
+  IntegerNumberValue integerNumberValue optional
+}with { 
+  variant (lengthIndicator) "LENGTHTO(integerNumberValue)"; 
+  variant "PRESENCE (elementIdentifier = 'BB'O;)";
+  variant (integerNumberValue)"CROSSTAG(int1,lengthIndicator=1;
+  int2,lengthIndicator=2)"
+}
+
+type union IntegerNumberValue
+{
+  LIN1 int1,
+  LIN2_BO_LAST int2
+}
+
+//8.119
+type record MillisecondTimeStamp
+{
+  OCT1            elementIdentifier,	//dec 188, 'BC'O
+  LIN2_BO_LAST    lengthIndicator,
+  BIT4            instance,
+  BIT4            spare,
+  OCT6            millisecondTimeStampValue,
+  octetstring     additionalOctets optional
+}with { 
+  variant (lengthIndicator) "LENGTHTO(millisecondTimeStampValue,additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = 'BC'O;)";
+}
+
+//8.120
+type record MonitoringEventInformation
+{
+  OCT1            elementIdentifier,	//dec 189, 'BD'O
+  LIN2_BO_LAST    lengthIndicator,
+  BIT4            instance,
+  BIT4            spare,
+  OCT4            sCEFReferenceID,  //Unsigned32 ?
+  LIN1            sCEF_ID_length,
+  octetstring     sCEF_ID,
+  OCT2            remainingNumberOfReports, //Unsigned32 ?
+  octetstring     additionalOctets optional
+}with { 
+  variant (lengthIndicator) "LENGTHTO(sCEFReferenceID,sCEF_ID_length,sCEF_ID,remainingNumberOfReports,additionalOctets)"; 
+  variant (sCEF_ID_length) "LENGTHTO(sCEF_ID)"; 
+  variant "PRESENCE (elementIdentifier = 'BD'O;)";
+}
+
+//8.121
+type record ECGI_List
+{
+  OCT1            elementIdentifier,	//dec 190, 'BE'O
+  LIN2_BO_LAST    lengthIndicator,
+  BIT4            instance,
+  BIT4            spare,
+  LIN2_BO_LAST    numberOfECGI,
+  ECGIs           eCGIs,
+  octetstring     additionalOctets optional
+}with { 
+  variant (lengthIndicator) "LENGTHTO(numberOfECGI,eCGIs,additionalOctets)"; 
+  variant (numberOfECGI) "LENGTHTO(eCGIs)";
+  variant (numberOfECGI) "UNIT(elements)"; 
+  variant "PRESENCE (elementIdentifier = 'BE'O;)";
+}
+
+type set of ECGI ECGIs;
+
+//8.122
+type record RemoteUEContextGrouped
+{
+  OCT1            elementIdentifier,	//dec 191, 'BF'O
+  LIN2_BO_LAST    lengthIndicator,
+  BIT4            instance,
+  BIT4            spare,
+  RemoteUEContextIEs remoteUEContextIEs
+}with { 
+  variant (lengthIndicator) "LENGTHTO(remoteUEContextIEs)"; 
+  variant "PRESENCE (elementIdentifier = 'BF'O;)";
+}
+
+type set RemoteUEContextIEs
+{
+  RemoteUserID          remoteUserID optional,
+  RemoteUEIPInformation remoteUEIPInformation optional
+}
+
+type set of RemoteUEContextGrouped RemoteUEContextGrouped_List;
+
+//8.123
+type record RemoteUserID
+{
+  OCT1            elementIdentifier,	//dec 192, 'C0'O
+  LIN2_BO_LAST    lengthIndicator,
+  BIT4            instance,
+  BIT4            spare,
+  BIT1            mSISDNF,
+  BIT1            iMEIF,
+  BIT6            spare2,
+  LIN1            lengthOfIMSI,
+  hexstring       iMSI,
+  LIN1            lengthOfMSISDN optional,
+  hexstring       mSISDN optional,
+  LIN1            lengthOfIMEI optional,
+  octetstring     iMEI optional,
+  octetstring     additionalOctets optional
+}with { 
+  variant "PRESENCE (elementIdentifier = 'C0'O;)";
+  variant (lengthIndicator) "LENGTHTO(mSISDNF,iMEIF,spare2,lengthOfIMSI,iMSI,lengthOfMSISDN,mSISDN,lengthOfIMEI,iMEI,additionalOctets)"; 
+  variant (lengthOfMSISDN) "PRESENCE(mSISDNF = '1'B)";   
+  variant (mSISDN) "PRESENCE(mSISDNF = '1'B)";   
+  variant (lengthOfIMEI) "PRESENCE(iMEIF = '1'B)";   
+  variant (iMEI) "PRESENCE(iMEIF = '1'B)";   
+  variant (lengthOfIMSI) "LENGTHTO(iMSI)";
+  variant (iMSI) "PADDING(yes)";
+  variant (iMSI) "PADDING_PATTERN('1'B)";
+  variant (lengthOfMSISDN) "LENGTHTO(mSISDN)"; 
+  variant (mSISDN) "PADDING(yes)";
+  variant (mSISDN) "PADDING_PATTERN('1'B)";
+  variant (lengthOfIMEI) "LENGTHTO(iMEI)" ;
+}
+
+//8.124
+type record RemoteUEIPInformation
+{
+  OCT1            elementIdentifier,	//dec 193, 'C1'O
+  LIN2_BO_LAST    lengthIndicator,
+  BIT4            instance,
+  BIT4            spare,
+  octetstring     remoteUEIPInformation
+}with { 
+  variant (lengthIndicator) "LENGTHTO(remoteUEIPInformation)"; 
+  variant "PRESENCE (elementIdentifier = 'C1'O;)";
+}
+
+//8.125
+type record CIoT_OptimizationsSupportIndication
+{
+  OCT1            elementIdentifier,	//dec 194, 'C2'O
+  LIN2_BO_LAST    lengthIndicator,
+  BIT4            instance,
+  BIT4            spare,
+  BIT1            sGNIPDN,
+  BIT1            sCNIPDN,
+  BIT1            aWOPDN,
+  BIT1            iHCSI,
+  BIT4            spare2,
+  octetstring     additionalOctets optional
+}with { 
+  variant (lengthIndicator) "LENGTHTO(sGNIPDN,sCNIPDN,aWOPDN,iHCSI,spare2,additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = 'C2'O;)";
+}
+
+//8.126
+type record SCEF_PDN_ConnectionGrouped
+{
+  OCT1            elementIdentifier,	//dec 195, 'C3'O
+  LIN2_BO_LAST    lengthIndicator,
+  BIT4            instance,
+  BIT4            spare,
+  SCEF_PDN_ConnectionIEs sCEF_PDN_ConnectionIEs
+}with { 
+  variant (lengthIndicator) "LENGTHTO(sCEF_PDN_ConnectionIEs)"; 
+  variant "PRESENCE (elementIdentifier = 'C3'O;)";
+}
+
+type set SCEF_PDN_ConnectionIEs
+{
+  AccessPointName  accessPointName optional,
+  EPS_BearerID     ePS_BearerID optional,
+  NodeIdentifier   nodeIdentifier optional
+}
+
+type set of SCEF_PDN_ConnectionGrouped SCEF_PDN_ConnectionGrouped_List;
+
+//8.127
+type record HeaderCompressionConfiguration
+{
+  OCT1            elementIdentifier,	//dec 196, 'C4'O
+  LIN2_BO_LAST    lengthIndicator,
+  BIT4            instance,
+  BIT4            spare,
+  OCT2            rOHC_Profiles,
+  LIN2_BO_LAST    maxCID (1..16383),
+  octetstring     additionalOctets optional
+}with { 
+  variant (lengthIndicator) "LENGTHTO(rOHC_Profiles,maxCID,additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = 'C4'O;)";
+}
+
+//8.128
+type record ExtendedProtocolConfigOptions
+{
+  OCT1            elementIdentifier,	//dec 197, 'C5'O
+  LIN2_BO_LAST    lengthIndicator,
+  BIT4            instance,
+  BIT4            spare,
+  octetstring     ePCO
+}with { 
+  variant (lengthIndicator) "LENGTHTO(ePCO)"; 
+  variant "PRESENCE (elementIdentifier = 'C5'O;)";
+}
+
+//8.129
+type record ServingPLMNRateControl
+{
+  OCT1            elementIdentifier,	//dec 197, 'C6'O
+  LIN2_BO_LAST    lengthIndicator,
+  BIT4            instance,
+  BIT4            spare,
+  LIN2_BO_LAST    uplinkRateLimit,
+  LIN2_BO_LAST    downlinkRateLimit,
+  octetstring     additionalOctets optional
+}with { 
+  variant (lengthIndicator) "LENGTHTO(uplinkRateLimit,downlinkRateLimit,additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = 'C6'O;)";
+}
+
+//8.130
+type record Counter
+{
+  OCT1            elementIdentifier,	//dec 199, 'C7'O
+  LIN2_BO_LAST    lengthIndicator,
+  BIT4            instance,
+  BIT4            spare,
+  OCT4            timestampValue,
+  OCT1            counterValue,
+  octetstring     additionalOctets optional
+}with { 
+  variant (lengthIndicator) "LENGTHTO(timestampValue,counterValue,additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = 'C7'O;)";
+}
+
+//8.131
+type record Mapped_UE_UsageType
+{
+  OCT1            elementIdentifier,	//dec 200, 'C8'O
+  LIN2_BO_LAST    lengthIndicator,
+  BIT4            instance,
+  BIT4            spare,
+  OCT2            mapped_UE_UsageType,
+  octetstring     additionalOctets optional
+}with { 
+  variant (lengthIndicator) "LENGTHTO(mapped_UE_UsageType,additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = 'C8'O;)";
+}
+
+//8.132
+type record Secondary_RAT_UsageDataReport
+{
+  OCT1            elementIdentifier,	//dec 201, 'C9'O
+  LIN2_BO_LAST    lengthIndicator,
+  BIT4            instance,
+  BIT4            spare,
+  BIT1            iRPGW,
+  BIT1            iRSGW,
+  BIT6            spare2,
+  integer         secondaryRATType,
+  BIT4            eBI,
+  BIT4            spare3,
+  OCT4            startTimestamp, 
+  OCT4            endTimestamp,
+  OCT8            usageDataDL,
+  OCT8            usageDataUL,
+  octetstring     additionalOctets optional
+}with { 
+  variant (lengthIndicator) "LENGTHTO(iRPGW,iRSGW,spare2,secondaryRATType,eBI,spare3,
+  startTimestamp,endTimestamp,usageDataDL,usageDataUL,additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = 'C9'O;)";
+}
+
+type set of  Secondary_RAT_UsageDataReport  Secondary_RAT_UsageDataReport_List;
+
+//8.133
+type record UP_FunctionSelectionIndicationFlags
+{
+  OCT1            elementIdentifier,	//dec 202, 'CA'O
+  LIN2_BO_LAST    lengthIndicator,
+  BIT4            instance,
+  BIT4            spare,
+  BIT1            dCNR,
+  BIT7            spare2,
+  octetstring     additionalOctets optional
+}with { 
+  variant (lengthIndicator) "LENGTHTO(dCNR,spare2,additionalOctets)"; 
+  variant "PRESENCE (elementIdentifier = 'CA'O;)";
+}
+
+// GTPC PDUs
+// Path Management messages
+//7.1.1
+type set EchoRequest
+{
+  Recovery                     recovery,
+  NodeFeatures                 sendingNodeFeatures optional,
+  PrivateExtension_List        privateExtension optional
+};
+
+//7.1.2
+type set EchoResponse
+{
+  Recovery                     recovery,
+  NodeFeatures                 sendingNodeFeatures optional,
+  PrivateExtension_List        privateExtension optional
+};
+
+//7.1.3
+type set VersionNotSupported  
+{};
+
+// Tunnel Management messages
+//7.2.1
+type set CreateSessionRequest
+{
+  IMSI                                    iMSI   optional,
+  MSISDN                                  mSISDN      optional,
+  MEI                                     mEI         optional,
+  UserLocationInfo_List                   userLocationInfo optional,
+  ServingNetwork                          servingNetwork   optional,
+  RAT_Type                                rAT_Type,
+  Indication                              indication optional,
+  FullyQualifiedTEID_List                 fullyQualifiedTEID,  
+  AccessPointName                         accessPointName,
+  SelectionMode                           selectionMode optional,
+  PDN_Type                                pDN_Type optional,
+  PDN_AddressAllocation                   pDN_AddressAllocation optional,
+  APN_Restriction                         maxAPN_Restriction optional,
+  AggregateMaximumBitRate                 ambr optional,
+  EPS_BearerID                            linkedEPS_Bearer_ID optional,
+  TrustedWLANModeIndication               trustedWLANModeIndication optional,
+  ProtocolConfigOptions                   protocolConfigOptions optional, 
+  BearerContextGrouped_List               bearerContextGrouped,  
+  TraceInformation                        traceInformation optional, 
+  Recovery                                recovery optional, 
+  FullyQualifiedPDN_ConnectionSetID_List  csid optional, 
+  UE_TimeZone                             uE_TimeZone optional,
+  User_CSG_Information                    user_CSG_Information optional,
+  ChargingCharacteristics                 chargingCharacteristics optional,
+  LocalDistinguishedName_List             lDN optional,
+  SignallingPriorityIndication            signallingPriorityIndication optional, 
+//  MMBR                                    maxMBR_APN_AMBR optional,
+  IP_Address_List                         iP_Addr optional,
+  PortNumber_List                         portNumber optional,	 
+  APCO                                    aPCO optional,
+  TrustedWLANAccessNetworkIdentifier_List trustedWLANAccessNetworkIdentifier optional,
+  CNOperatorSelectionEntity               cNOperatorSelectionEntity optional,
+  PresenceReportingAreaInformation_List   presenceReportingAreaInformation optional,
+  OverloadControlInformationGrouped_List  overloadControlInformationGrouped optional,
+  MillisecondTimeStamp                    originationTimeStamp optional,
+  IntegerNumber                           maximumWaitTime optional,
+  TWANIdentifierTimestamp                 wLANLocationTimestamp optional,
+  FullyQualifiedContainer                 nBIFOMContainer optional,
+  RemoteUEContextGrouped_List             remoteUEContextGrouped optional,
+  NodeIdentifier_List                     nodeIdentifier optional,            
+  ExtendedProtocolConfigOptions           extendedProtocolConfigOptions optional,
+  ServingPLMNRateControl                  servingPLMNRateControl optional,
+  Counter                                 counter optional,
+  Mapped_UE_UsageType                     mapped_UE_UsageType optional,
+  FullyQualifiedDomainName                fullyQualifiedDomainName optional,
+  Secondary_RAT_UsageDataReport_List      secondary_RAT_UsageDataReport optional,
+  UP_FunctionSelectionIndicationFlags     uP_FunctionSelectionIndicationFlags optional,
+  PrivateExtension_List                   privateExtension optional 
+} with { 
+  variant(userLocationInfo) "REPEATABLE(yes)";
+  variant(fullyQualifiedTEID) "REPEATABLE(yes)";
+  variant(bearerContextGrouped) "REPEATABLE(yes)";
+  variant(csid) "REPEATABLE(yes)"; 
+  variant(lDN) "REPEATABLE(yes)"; 
+  variant(iP_Addr) "REPEATABLE(yes)"; 
+  variant(portNumber) "REPEATABLE(yes)";
+  variant(overloadControlInformationGrouped) "REPEATABLE(yes)";
+  variant(remoteUEContextGrouped) "REPEATABLE(yes)";
+  variant(trustedWLANAccessNetworkIdentifier) "REPEATABLE(yes)";
+  variant(presenceReportingAreaInformation) "REPEATABLE(yes)";
+  variant(secondary_RAT_UsageDataReport) "REPEATABLE(yes)";
+};
+
+
+//7.2.2 
+//6.1.1 - Only the Cause information element, optionally Protocol Configuration Options and optionally the Recovery information element 
+//shall be included in the response if the Cause contains a value indicating that the request is not accepted.
+type set CreateSessionResponse
+{
+  Cause                                   cause,
+  ChangeReportingAction                   changeReportingAction optional, 
+  CSG_InformationReportingAction          cSG_InformationReportingAction optional,
+  HeNBInformationReporting                heNBInformationReporting optional,
+  FullyQualifiedTEID_List                 fullyQualifiedTEID optional,
+  PDN_AddressAllocation                   pDN_AddressAllocation optional,
+  APN_Restriction                         aPN_Restriction optional,  
+  AggregateMaximumBitRate                 ambr optional,
+  EPS_BearerID                            linkedEPS_Bearer_ID optional,
+  ProtocolConfigOptions                   protocolConfigOptions optional, 
+  BearerContextGrouped_List               bearerContextGrouped optional,
+  Recovery                                recovery optional,  
+  FullyQualifiedDomainName                chargingGatewayName optional,
+  IP_Address                              chargingGatewayAddress optional,
+  FullyQualifiedPDN_ConnectionSetID_List  csid optional, 
+  LocalDistinguishedName_List             lDN optional, 
+  EPC_Timer                               pGW_Back_OffTime optional,
+  APCO                                    aPCO optional,
+  IPv4ConfigurationPrameters              trustedWLANIPv4Parameters optional,
+  Indication                              indicationFlags optional,
+  PresenceReportingAreaAction_List        presenceReportingAreaAction optional,
+  LoadControlInformationGrouped_List      loadControlInformationGrouped optional,
+  OverloadControlInformationGrouped_List  overloadControlInformationGrouped optional,
+  FullyQualifiedContainer                 nBIFOMContainer optional,
+  ChargingID                              pDNConnectionChargingID optional,
+  ExtendedProtocolConfigOptions           extendedProtocolConfigOptions optional,
+  PrivateExtension_List                   privateExtension optional
+} with { 
+  variant(fullyQualifiedTEID) "REPEATABLE(yes)";
+  variant(bearerContextGrouped) "REPEATABLE(yes)";
+  variant(csid) "REPEATABLE(yes)";
+  variant(lDN) "REPEATABLE(yes)";    
+  variant(loadControlInformationGrouped) "REPEATABLE(yes)";    
+  variant(presenceReportingAreaAction) "REPEATABLE(yes)";    
+  variant(overloadControlInformationGrouped) "REPEATABLE(yes)";    
+};
+
+//7.2.3
+type set CreateBearerRequest
+{
+  ProcedureTransactionID                  procedureTransactionID optional,
+  EPS_BearerID                            linkedEPS_BearerID,  
+  ProtocolConfigOptions                   protocolConfigOptions optional, 
+  BearerContextGrouped_List               bearerContextGrouped,
+  FullyQualifiedPDN_ConnectionSetID_List  csid optional,  
+  ChangeReportingAction                   changeReportingAction optional,
+  CSG_InformationReportingAction          cSG_InformationReportingAction optional,
+  HeNBInformationReporting		            heNBInformationReporting optional,
+  PresenceReportingAreaAction_List        presenceReportingAreaAction optional,
+  Indication                              indicationFlags optional,
+  LoadControlInformationGrouped_List      loadControlInformationGrouped optional,
+  OverloadControlInformationGrouped_List  overloadControlInformationGrouped optional,
+  FullyQualifiedContainer                 nBIFOMContainer optional,
+  PrivateExtension_List                   privateExtension optional 
+} with {
+  variant(bearerContextGrouped) "REPEATABLE(yes)";
+  variant(csid) "REPEATABLE(yes)";
+  variant(loadControlInformationGrouped) "REPEATABLE(yes)";    
+  variant(presenceReportingAreaAction) "REPEATABLE(yes)";    
+  variant(overloadControlInformationGrouped) "REPEATABLE(yes)";    
+};
+
+//7.2.4
+//6.1.1 - Only the Cause information element, optionally Protocol Configuration Options and optionally the Recovery information element 
+//shall be included in the response if the Cause contains a value indicating that the request is not accepted.
+type set CreateBearerResponse
+{
+  Cause                                   cause,
+  BearerContextGrouped_List               bearerContextGrouped optional,
+  Recovery                                recovery optional,  
+  FullyQualifiedPDN_ConnectionSetID_List  csid optional,
+  ProtocolConfigOptions                   protocolConfigOptions optional,  
+  UE_TimeZone                             uE_TimeZone optional,
+  UserLocationInfo                        uLI optional, 
+  TrustedWLANAccessNetworkIdentifier_List	trustedWLANAccessNetworkIdentifier optional,
+  OverloadControlInformationGrouped_List  overloadControlInformationGrouped optional,
+  PresenceReportingAreaInformation_List   presenceReportingAreaInformation optional,
+  IP_Address_List                         iP_Addr optional,
+  TWANIdentifierTimestamp                 wLANLocationTimestamp optional,
+  PortNumber_List			                    portNumber optional,
+  FullyQualifiedContainer                 nBIFOMContainer optional,
+  ExtendedProtocolConfigOptions           extendedProtocolConfigOptions optional,
+  PrivateExtension_List                   privateExtension optional 
+} with {  
+  variant(bearerContextGrouped) "REPEATABLE(yes)";
+  variant(csid) "REPEATABLE(yes)";
+  variant(overloadControlInformationGrouped) "REPEATABLE(yes)";    
+  variant(iP_Addr) "REPEATABLE(yes)";
+  variant(trustedWLANAccessNetworkIdentifier) "REPEATABLE(yes)";
+  variant(presenceReportingAreaInformation) "REPEATABLE(yes)";
+  variant(portNumber) "REPEATABLE(yes)"    
+};
+
+//7.2.5
+type set BearerResourceCommand
+{
+  EPS_BearerID_List                       epsBearerIdentity,
+  ProcedureTransactionID                  procedureTransactionID,
+  FlowQoS                                 flowQoS optional,
+  TrafficAggregateDescription             tAD optional, 
+  RAT_Type                                rAT_Type optional, 
+  ServingNetwork                          servingNetwork optional,
+  UserLocationInfo                        userLocationInfo optional,
+  // EBI is included in 1st field : EPS_BearerID_List
+  Indication                              indicationFlags optional,
+  FullyQualifiedTEID_List                 fullyQualifiedTEID optional,
+  ProtocolConfigOptions                   protocolConfigOptions optional,
+  SignallingPriorityIndication            signallingPriorityIndication optional, 
+  OverloadControlInformationGrouped_List  overloadControlInformationGrouped optional,
+  FullyQualifiedContainer                 nBIFOMContainer optional,
+  ExtendedProtocolConfigOptions           extendedProtocolConfigOptions optional,
+  PrivateExtension_List                   privateExtension optional 
+} with {  
+  variant(epsBearerIdentity) "REPEATABLE(yes)";
+  variant(fullyQualifiedTEID) "REPEATABLE(yes)";
+  variant(overloadControlInformationGrouped) "REPEATABLE(yes)";    
+};
+
+//7.2.6
+type set BearerResourceFailureIndication
+{
+  Cause                                   cause,
+  EPS_BearerID                            linkedBearerIdentity,
+  ProcedureTransactionID                  procedureTransactionID,
+  Indication                              indicationFlags optional,
+  OverloadControlInformationGrouped_List  overloadControlInformationGrouped optional,
+  Recovery                                recovery optional, 
+  FullyQualifiedContainer                 nBIFOMContainer optional,
+  PrivateExtension_List                   privateExtension optional
+} with {  
+  variant(overloadControlInformationGrouped) "REPEATABLE(yes)";    
+};
+
+//7.2.7
+type set ModifyBearerRequest
+{
+  MEI                                     mEI optional, 
+  UserLocationInfo_List                   userLocationInfo optional,
+  ServingNetwork                          servingNetwork optional, 
+  RAT_Type                                rAT_Type optional, 
+  Indication                              indicationFlags optional, 
+  FullyQualifiedTEID                      fullyQualifiedTEID optional,
+  AggregateMaximumBitRate                 ambr optional,  
+  DelayValue                              delayDownlinkPacketNotificationReq optional,  
+  BearerContextGrouped_List               bearerContextGrouped optional, 
+  Recovery                                recovery optional, 
+  UE_TimeZone                             uE_TimeZone optional, 
+  FullyQualifiedPDN_ConnectionSetID_List  csid optional, 
+  User_CSG_Information                    user_CSG_Information optional,
+  IP_Address_List                         iP_Addr optional,
+  PortNumber_List                         portNumber optional,	 
+  LocalDistinguishedName_List             lDN optional,   
+//  MMBR                                    maxMBR_APN_AMBR optional,
+  CNOperatorSelectionEntity               cNOperatorSelectionEntity optional,
+  PresenceReportingAreaInformation_List   presenceReportingAreaInformation optional,
+  OverloadControlInformationGrouped_List  overloadControlInformationGrouped optional,
+  ServingPLMNRateControl                  servingPLMNRateControl optional,
+  Counter                                 counter optional,
+  IMSI                                    iMSI optional,
+  TrustedWLANAccessNetworkIdentifier      trustedWLANAccessNetworkIdentifier optional,
+  TWANIdentifierTimestamp                 tWANIdentifierTimestamp optional,
+  Secondary_RAT_UsageDataReport_List      secondary_RAT_UsageDataReport optional,
+  PrivateExtension_List                   privateExtension optional
+} with { 
+  variant(userLocationInfo) "REPEATABLE(yes)"; 
+  variant(bearerContextGrouped) "REPEATABLE(yes)"; 
+  variant(csid) "REPEATABLE(yes)";
+  variant(lDN) "REPEATABLE(yes)"; 
+  variant(iP_Addr) "REPEATABLE(yes)";
+  variant(portNumber) "REPEATABLE(yes)";
+  variant(overloadControlInformationGrouped) "REPEATABLE(yes)";
+  variant(presenceReportingAreaInformation) "REPEATABLE(yes)";
+  variant(secondary_RAT_UsageDataReport) "REPEATABLE(yes)";
+};
+
+//7.2.8
+type set ModifyBearerResponse
+{
+  Cause                                   cause,
+  MSISDN                                  mSISDN optional,
+  EPS_BearerID                            linkedEPS_Bearer_ID optional,
+  APN_Restriction                         aPN_Restriction optional,
+  ProtocolConfigOptions                   protocolConfigOptions optional,
+  BearerContextGrouped_List               bearerContextGrouped optional, 
+  ChangeReportingAction                   changeReportingAction optional,
+  CSG_InformationReportingAction          cSG_InformationReportingAction optional,
+  HeNBInformationReporting		  heNBInformationReporting optional,
+  FullyQualifiedDomainName                chargingGatewayName optional,
+  IP_Address                              chargingGatewayAddress optional, 
+  FullyQualifiedPDN_ConnectionSetID_List  csid optional,
+  Recovery                                recovery optional,
+  LocalDistinguishedName_List             lDN optional, 
+  Indication                              indicationFlags optional, 
+  PresenceReportingAreaAction_List        presenceReportingAreaAction optional,
+  LoadControlInformationGrouped_List      loadControlInformationGrouped optional,     
+  OverloadControlInformationGrouped_List  overloadControlInformationGrouped optional,     
+  ChargingID                              pDNConnectionChargingID optional,
+  PrivateExtension_List                   privateExtension optional 
+} with { 
+  variant(bearerContextGrouped) "REPEATABLE(yes)"; 
+  variant(csid) "REPEATABLE(yes)";
+  variant(lDN) "REPEATABLE(yes)";      
+  variant(loadControlInformationGrouped) "REPEATABLE(yes)";
+  variant(presenceReportingAreaAction) "REPEATABLE(yes)";
+  variant(overloadControlInformationGrouped) "REPEATABLE(yes)";
+};
+
+//7.2.9.1
+type set DeleteSessionRequest
+{
+  Cause                                   cause optional,
+  EPS_BearerID                            linkedEPS_Bearer_ID optional, 
+  UserLocationInfo                        uLI optional, 
+  Indication                              indicationFlags optional,
+  ProtocolConfigOptions                   protocolConfigOptions optional, 
+  NodeType                                originatingNode optional, 
+  FullyQualifiedTEID                      fullyQualifiedTEID optional, 
+  UE_TimeZone                             uE_TimeZone optional,
+  UserLocationInformationTimestamp        uLITimestamp optional,
+  RAN_NASCause                            rANNASReleaseCause optional,
+  TrustedWLANAccessNetworkIdentifier_List trustedWLANAccessNetworkIdentifier optional,
+  TWANIdentifierTimestamp_List            tWANIdentifierTimestamp optional,
+  OverloadControlInformationGrouped_List  overloadControlInformationGrouped optional,     
+  IP_Address                              uELocalIP_Addr optional,
+  PortNumber_List                         portNumber optional,
+  ExtendedProtocolConfigOptions           extendedProtocolConfigOptions optional,
+  Secondary_RAT_UsageDataReport_List      secondary_RAT_UsageDataReport optional,
+  PrivateExtension_List                   privateExtension optional
+} with { 
+  variant(overloadControlInformationGrouped) "REPEATABLE(yes)";
+  variant(trustedWLANAccessNetworkIdentifier) "REPEATABLE(yes)";    
+  variant(tWANIdentifierTimestamp) "REPEATABLE(yes)";
+  variant(portNumber) "REPEATABLE(yes)";     
+  variant(secondary_RAT_UsageDataReport) "REPEATABLE(yes)";     
+};
+//7.2.9.2
+type set DeleteBearerRequest
+{
+  EPS_BearerID_List                       epsBearerIdentity optional, //LBI , EBI
+  BearerContextGrouped_List               bearerContextGrouped optional,  
+  ProcedureTransactionID                  procedureTransactionID optional, 
+  ProtocolConfigOptions                   protocolConfigOptions optional, 
+  FullyQualifiedPDN_ConnectionSetID_List  csid optional, 
+  Cause                                   cause optional, 
+  Indication                              indicationFlags optional, 
+  LoadControlInformationGrouped_List      loadControlInformationGrouped optional,     
+  OverloadControlInformationGrouped_List  overloadControlInformationGrouped optional,     
+  FullyQualifiedContainer                 nBIFOMContainer optional,
+  ExtendedProtocolConfigOptions           extendedProtocolConfigOptions optional,
+  PrivateExtension_List                   privateExtension optional
+} with { 
+  variant(epsBearerIdentity) "REPEATABLE(yes)";
+  variant(bearerContextGrouped) "REPEATABLE(yes)";
+  variant(csid) "REPEATABLE(yes)"  
+  variant(loadControlInformationGrouped) "REPEATABLE(yes)";
+  variant(overloadControlInformationGrouped) "REPEATABLE(yes)";
+};
+
+//7.2.10.1
+type set DeleteSessionResponse
+{
+  Cause                                   cause,
+  Recovery                                recovery optional,
+  ProtocolConfigOptions                   protocolConfigOptions optional, 
+  Indication                              indicationFlags optional, 
+  LoadControlInformationGrouped_List      loadControlInformationGrouped optional,     
+  OverloadControlInformationGrouped_List  overloadControlInformationGrouped optional,     
+  ExtendedProtocolConfigOptions           extendedProtocolConfigOptions optional,
+  PrivateExtension_List                   privateExtension optional
+} with { 
+  variant(loadControlInformationGrouped) "REPEATABLE(yes)";
+  variant(overloadControlInformationGrouped) "REPEATABLE(yes)";
+};
+
+//7.2.10.2
+type set DeleteBearerResponse
+{
+  Cause                                   cause,
+  EPS_BearerID                            linkedBearerIdentity optional,
+  BearerContextGrouped_List               bearerContextGrouped optional, 
+  Recovery                                recovery optional,
+  FullyQualifiedPDN_ConnectionSetID_List  csid optional,
+  ProtocolConfigOptions                   protocolConfigOptions optional,  
+  UE_TimeZone                             uE_TimeZone optional,
+  UserLocationInfo                        uLI optional,
+  UserLocationInformationTimestamp        uLITimestamp optional,
+  TrustedWLANAccessNetworkIdentifier      trustedWLANAccessNetworkIdentifier optional,
+  TWANIdentifierTimestamp                 tWANIdentifierTimestamp optional,
+  OverloadControlInformationGrouped_List  overloadControlInformationGrouped optional,     
+  IP_Address_List                         iP_Addr optional,
+  PortNumber_List			  portNumber optional,
+  FullyQualifiedContainer                 nBIFOMContainer optional,
+  Secondary_RAT_UsageDataReport_List      secondary_RAT_UsageDataReport optional,
+  PrivateExtension_List                   privateExtension optional
+} with { 
+  variant(bearerContextGrouped) "REPEATABLE(yes)"; 
+  variant(csid) "REPEATABLE(yes)";
+  variant(overloadControlInformationGrouped) "REPEATABLE(yes)";
+  variant(iP_Addr) "REPEATABLE(yes)";
+  variant(portNumber) "REPEATABLE(yes)"; 
+  variant(secondary_RAT_UsageDataReport) "REPEATABLE(yes)"; 
+};
+
+//7.2.11.1
+type set DownlinkDataNotification
+{
+  Cause                                   cause optional,
+  EPS_BearerID_List                       epsBearerIdentity optional,
+  AllocationRetentionPriority             aRP optional,
+  IMSI                                    iMSI optional,
+  FullyQualifiedTEID                      fullyQualifiedTEID optional,
+  Indication                              indicationFlags optional, 
+  LoadControlInformationGrouped           loadControlInformationGrouped optional,     
+  OverloadControlInformationGrouped       overloadControlInformationGrouped optional,     
+  PagingAndServiceInformation             pagingAndServiceInformation optional,
+  PrivateExtension_List                   privateExtension optional   
+}with { 
+  variant(epsBearerIdentity) "REPEATABLE(yes)";
+}; 
+
+
+//7.2.11.2
+type set DownlinkDataNotificationAcknowledgement
+{
+  Cause                                   cause,
+  DelayValue                              dataNotificationDelay optional,  
+  Recovery                                recovery optional, 
+  Throttling                              dL_LowPriorityTrafficThrottling optional, 
+  IMSI                                    iMSI optional,
+  EPC_Timer                               dLBufferingDuration optional,
+  IntegerNumber                           dLBufferingSuggestedPacketCount optional,
+  PrivateExtension_List                   privateExtension optional
+};
+
+//7.2.11.3
+type set DownlinkDataNotificationFailureIndication
+{
+  Cause                                   cause,
+  NodeType                                originatingNode optional,
+  IMSI                                    iMSI optional, 
+  PrivateExtension_List                   privateExtension optional
+};
+
+//7.2.12
+type set DeleteIndirectDataForwardingTunnelRequest
+{
+  PrivateExtension_List                   privateExtension optional
+};
+
+//7.2.13
+type set DeleteIndirectDataForwardingTunnelResponse
+{
+  Cause                                   cause,
+  Recovery                                recovery optional, 
+  PrivateExtension_List                   privateExtension optional
+}
+
+//7.2.14.1
+type set ModifyBearerCommand
+{
+  AggregateMaximumBitRate                 ambr,   
+  BearerContextGrouped                    bearerContextGrouped,
+  OverloadControlInformationGrouped_List  overloadControlInformationGrouped optional,
+  FullyQualifiedTEID                      fullyQualifiedTEID optional,      
+  PrivateExtension_List                   privateExtension optional 
+}with { 
+  variant(overloadControlInformationGrouped) "REPEATABLE(yes)";
+}; 
+
+//7.2.14.2
+type set ModifyBearerFailureIndication
+{
+  Cause                                   cause,
+  Recovery                                recovery optional, 
+  Indication                              indicationFlags optional, 
+  OverloadControlInformationGrouped_List  overloadControlInformationGrouped optional,     
+  PrivateExtension_List                   privateExtension optional 
+}with { 
+  variant(overloadControlInformationGrouped) "REPEATABLE(yes)";
+}; 
+
+//7.2.15
+type set UpdateBearerRequest
+{
+  BearerContextGrouped_List               bearerContextGrouped, 
+  ProcedureTransactionID                  procedureTransactionID optional, 
+  ProtocolConfigOptions                   protocolConfigOptions optional, 
+  AggregateMaximumBitRate                 apn_ambr, 
+  ChangeReportingAction                   changeReportingAction optional,  
+  CSG_InformationReportingAction          cSG_InformationReportingAction optional,
+  Indication                              indicationFlags optional,
+  HeNBInformationReporting                heNBInformationReporting optional,
+  FullyQualifiedPDN_ConnectionSetID_List  csid optional,
+  PresenceReportingAreaAction_List        presenceReportingAreaAction optional,
+  LoadControlInformationGrouped_List      loadControlInformationGrouped optional,     
+  OverloadControlInformationGrouped_List  overloadControlInformationGrouped optional, 
+  FullyQualifiedContainer                 nBIFOMContainer optional,
+  PrivateExtension_List                   privateExtension optional  
+} with {   
+  variant(bearerContextGrouped) "REPEATABLE(yes)";
+  variant(csid) "REPEATABLE(yes)";     
+  variant(loadControlInformationGrouped) "REPEATABLE(yes)";
+  variant(presenceReportingAreaAction) "REPEATABLE(yes)";
+  variant(overloadControlInformationGrouped) "REPEATABLE(yes)";
+};
+
+//7.2.16
+//6.1.1 - Only the Cause information element, optionally Protocol Configuration Options and optionally the Recovery information element 
+//shall be included in the response if the Cause contains a value indicating that the request is not accepted.
+type set UpdateBearerResponse
+{
+  Cause                                   cause,
+  BearerContextGrouped_List               bearerContextGrouped optional,
+  ProtocolConfigOptions                   protocolConfigOptions optional,
+  Recovery                                recovery optional, 
+  FullyQualifiedPDN_ConnectionSetID_List  csid optional, 
+  Indication                              indicationFlags optional,
+  UE_TimeZone                             uE_TimeZone optional,
+  UserLocationInfo                        uLI optional,
+  TrustedWLANAccessNetworkIdentifier      trustedWLANAccessNetworkIdentifier optional,
+  OverloadControlInformationGrouped_List  overloadControlInformationGrouped optional,     
+  PresenceReportingAreaInformation_List   presenceReportingAreaInformation optional,
+  IP_Address_List                         iP_Addr optional,
+  TWANIdentifierTimestamp                 tWANIdentifierTimestamp optional,
+  PortNumber_List                         portNumber optional,
+  FullyQualifiedContainer                 nBIFOMContainer optional,
+  ExtendedProtocolConfigOptions           extendedProtocolConfigOptions optional,
+  PrivateExtension_List                   privateExtension optional    
+} with {  
+  variant(bearerContextGrouped) "REPEATABLE(yes)";
+  variant(csid) "REPEATABLE(yes)";     
+  variant(overloadControlInformationGrouped) "REPEATABLE(yes)";
+  variant(presenceReportingAreaInformation) "REPEATABLE(yes)";
+  variant(iP_Addr) "REPEATABLE(yes)";
+  variant(portNumber) "REPEATABLE(yes)";      
+};
+
+//7.2.17.1
+type set DeleteBearerCommand
+{
+  BearerContextGrouped_List               bearerContextGrouped,
+  UserLocationInfo                        uli optional,
+  UserLocationInformationTimestamp        uli_timestamp optional,
+  UE_TimeZone                             ue_timezone optional, 
+  OverloadControlInformationGrouped_List  overloadControlInformationGrouped optional,
+  FullyQualifiedTEID                      fullyQualifiedTEID optional,      
+  Secondary_RAT_UsageDataReport_List      secondary_RAT_UsageDataReport optional,
+  PrivateExtension_List                   privateExtension optional 
+} with {  
+  variant(bearerContextGrouped) "REPEATABLE(yes)";
+  variant(overloadControlInformationGrouped) "REPEATABLE(yes)";
+  variant(secondary_RAT_UsageDataReport) "REPEATABLE(yes)";
+};
+
+//7.2.17.2
+type set DeleteBearerFailureIndication
+{
+  Cause                                  cause,
+  BearerContextGrouped_List              bearerContextGrouped, 
+  Recovery                               recovery optional, 
+  Indication                             indicationFlags optional,
+  OverloadControlInformationGrouped_List overloadControlInformationGrouped optional,     
+  PrivateExtension_List                  privateExtension optional 
+} with {   
+  variant(bearerContextGrouped) "REPEATABLE(yes)";   
+  variant(overloadControlInformationGrouped) "REPEATABLE(yes)";
+};
+
+//7.2.18
+type set CreateIndirectDataForwardingTunnelRequest
+{
+  IMSI                                   iMSI optional,
+  MEI                                    mEI optional,  
+  Indication                             indicationFlags optional, 
+  FullyQualifiedTEID                     fullyQualifiedTEID optional,
+  BearerContextGrouped_List              bearerContextGrouped, 
+  Recovery                               recovery optional,   
+  PrivateExtension_List                  privateExtension optional 
+} with {   
+  variant(bearerContextGrouped) "REPEATABLE(yes)";   
+};
+
+//7.2.19
+//6.1.1 - Only the Cause information element, optionally Protocol Configuration Options and optionally the Recovery information element 
+//shall be included in the response if the Cause contains a value indicating that the request is not accepted.
+type set CreateIndirectDataForwardingTunnelResponse
+{
+  Cause                                  cause,
+  FullyQualifiedTEID                     fullyQualifiedTEID optional, 
+  BearerContextGrouped_List              bearerContextGrouped optional,
+  Recovery                               recovery optional,    
+  PrivateExtension_List                  privateExtension optional 
+} with {   
+  variant(bearerContextGrouped) "REPEATABLE(yes)";   
+};
+
+//7.2.20
+// VOID
+
+//7.2.21
+type set ReleaseAccessBearersRequest
+{
+  EPS_BearerID_List                      listOfRABs optional,
+  NodeType                               originatingNode optional,
+  Indication                             indicationFlags optional,
+  Secondary_RAT_UsageDataReport_List     secondary_RAT_UsageDataReport optional,
+  PrivateExtension_List                  privateExtension optional   
+} with { 
+  variant(listOfRABs) "REPEATABLE(yes)";
+  variant(secondary_RAT_UsageDataReport) "REPEATABLE(yes)";
+};
+
+//7.2.22
+type set ReleaseAccessBearersResponse
+{
+  Cause                                 cause,
+  Recovery                              recovery optional, 
+  Indication                            indicationFlags optional,
+  LoadControlInformationGrouped         loadControlInformationGrouped optional,     
+  OverloadControlInformationGrouped     overloadControlInformationGrouped optional,     
+  PrivateExtension_List                 privateExtension optional  
+}
+
+//7.2.23
+type set StopPagingIndication
+{
+  IMSI                                   iMSI optional,
+  PrivateExtension_List                  privateExtension optional
+}
+
+//7.2.24
+type set ModifyAccessBearersRequest
+{
+  Indication                             indicationFlags optional, 
+  FullyQualifiedTEID                     fullyQualifiedTEID optional, 
+  DelayValue                             delayDownlinkPacketNotifReq optional,
+  BearerContextGrouped_List              bearerContextGrouped optional,
+  Recovery                               recovery optional,    
+  Secondary_RAT_UsageDataReport_List     secondary_RAT_UsageDataReport optional,
+  PrivateExtension_List                  privateExtension optional 
+} with {   
+  variant(bearerContextGrouped) "REPEATABLE(yes)";   
+  variant(secondary_RAT_UsageDataReport) "REPEATABLE(yes)";   
+};
+
+
+//7.2.25
+type set ModifyAccessBearersResponse
+{
+  Cause                                 cause,
+  BearerContextGrouped_List             bearerContextGrouped optional,
+  Recovery                              recovery optional,    
+  Indication                            indicationFlags optional,
+  LoadControlInformationGrouped         loadControlInformationGrouped optional,     
+  OverloadControlInformationGrouped     overloadControlInformationGrouped optional,     
+  PrivateExtension_List                 privateExtension optional  
+} with {   
+  variant(bearerContextGrouped) "REPEATABLE(yes)";   
+};
+
+
+//7.2.26
+type set RemoteUEReportNotification
+{
+  RemoteUEContextGrouped_List           remoteUEContextGrouped optional,
+  PrivateExtension_List                 privateExtension optional  
+} with {   
+  variant(remoteUEContextGrouped) "REPEATABLE(yes)";   
+};
+
+//7.2.27
+type set RemoteUEReportAcknowledge
+{
+  Cause                                 cause,
+  PrivateExtension_List                 privateExtension optional  
+};
+
+// Mobility Management messages
+//7.3.1
+type set ForwardRelocationRequest
+{
+  IMSI                                 iMSI optional,
+  FullyQualifiedTEID_List              fullyQualifiedTEID,
+  PDN_ConnectionGrouped_List           pDN_Connection optional,
+  FullyQualifiedDomainName_List        nodeName optional,
+  MM_Context                           mM_Context,
+  Indication                           indication optional,
+  FullyQualifiedContainer_List         containers optional,
+  TargetIdentification                 targetIdentification optional,
+  IP_Address_List                      iP_Addr optional,
+  FullyQualifiedCause_List             cause optional,
+  SourceIdentification                 sourceIdentification optional,
+  PLMN_ID                              selected_PLMN_ID optional,
+  Recovery                             recovery optional, 
+  TraceInformation                     traceInformation optional,
+  RFSP_Index_List                      rFSP_Index optional, 
+  CSG_ID                               cSG_ID optional,
+  CSG_MembershipIndication             cSG_MembershipIndication optional,
+  UE_TimeZone                          uE_TimeZone      optional,
+  ServingNetwork                       servingNetwork optional,
+  LocalDistinguishedName               lDN optional,
+  AdditionalMMContextForSRVCC          additionalMMContextForSRVCC optional,
+  AdditionalFlagsForSRVCC              additionalFlagsForSRVCC optional,
+  STN_SR                               sTN_SR optional,
+  MSISDN_List                          mSISDN optional,
+  MDT_Configuration                    mDT_Configuration optional,
+  User_CSG_Information                 user_CSG_Information optional,
+  MonitoringEventInformation           monitoringEventInformation optional,
+  IntegerNumber                        uEUsageType optional,
+  SCEF_PDN_ConnectionGrouped_List      mME_UE_SCEF_PDN_Connection optional,
+  PortNumber                           sourceUDPPortNumber optional,
+  ServingPLMNRateControl               servingPLMNRateControl optional,
+  PrivateExtension_List                privateExtension optional
+} with {      
+  variant(fullyQualifiedTEID) "REPEATABLE(yes)";
+  variant(pDN_Connection) "REPEATABLE(yes)";
+  variant(containers) "REPEATABLE(yes)"; 
+  variant(iP_Addr) "REPEATABLE(yes)"; 
+  variant(cause) "REPEATABLE(yes)"; 
+  variant(rFSP_Index) "REPEATABLE(yes)";
+  variant(nodeName) "REPEATABLE(yes)"; 
+  variant(mSISDN) "REPEATABLE(yes)"; 
+  variant(mME_UE_SCEF_PDN_Connection) "REPEATABLE(yes)"; 
+}
+
+//7.3.2
+type set ForwardRelocationResponse
+{
+  Cause                                cause,
+  FullyQualifiedTEID                   fullyQualifiedTEID optional,
+  Indication                           indication optional,
+  BearerContextGrouped_List            bearerContextGrouped optional, 
+  FullyQualifiedCause_List             fullyQualifiedCause optional, 
+  FullyQualifiedContainer_List         transparentContainer optional,
+  LocalDistinguishedName               lDN optional,
+  FullyQualifiedDomainName_List	       nodeName optional,
+  NodeNumber_List                      nodeNumber optional,
+  NodeIdentifier_List                  nodeIdentifier optional,
+  PrivateExtension_List                privateExtension optional
+} with {   
+  variant(bearerContextGrouped) "REPEATABLE(yes)"; 
+  variant(fullyQualifiedCause) "REPEATABLE(yes)";       
+  variant(transparentContainer) "REPEATABLE(yes)";      
+  variant(nodeName) "REPEATABLE(yes)";   
+  variant(nodeIdentifier) "REPEATABLE(yes)";   
+  variant(nodeNumber) "REPEATABLE(yes)";   
+};
+
+//7.3.3
+type set ForwardRelocationCompleteNotification
+{
+  Indication                           indication optional,
+  PrivateExtension_List                privateExtension optional
+};
+
+//7.3.4
+type set ForwardRelocationCompleteAcknowledge
+{
+  Cause                                cause,
+  Recovery                             recovery optional, 
+  Secondary_RAT_UsageDataReport_List   secondary_RAT_UsageDataReport optional,
+  PrivateExtension_List                privateExtension optional
+} with {   
+  variant(secondary_RAT_UsageDataReport) "REPEATABLE(yes)";   
+};
+
+//7.3.5
+type set ContextRequest
+{
+  IMSI                                 iMSI optional,
+  GUTI                                 gUTI optional,
+  UserLocationInfo                     uLI optional,
+  Packet_TMSI                          pTMSI optional,
+  P_TMSI_Signature                     pTMSI_Signature optional,
+  CompleteRequestMessage               complete_TAU_RequestMessage optional,
+  FullyQualifiedTEID                   address_and_TEID_for_ControlPlane optional,
+  PortNumber                           portNumber optional,
+  RAT_Type                             rAT_Type optional, 
+  Indication                           indication optional,
+  Hop_Counter                          hop_Counter optional,
+  ServingNetwork                       target_PLMN_ID optional,
+  LocalDistinguishedName               lDN optional,
+  FullyQualifiedDomainName_List	       nodeName optional,
+  NodeNumber                           sGSNNumber optional,
+  NodeIdentifier_List                  nodeIdentifier optional,
+  CIoT_OptimizationsSupportIndication  cIoT_OptimizationsSupportIndication optional,
+  PrivateExtension_List                privateExtension optional  
+} with {   
+  variant(nodeName) "REPEATABLE(yes)"; 
+  variant(nodeIdentifier) "REPEATABLE(yes)";   
+}; 
+
+//7.3.6
+type set ContextResponse
+{
+  Cause                                cause,
+  IMSI                                 iMSI optional,
+  MM_Context                           mM_Context optional,
+  PDN_ConnectionGrouped_List           pDN_Connection optional,
+  FullyQualifiedTEID_List              fullyQualifiedTEID optional,
+  FullyQualifiedDomainName_List        nodeName optional,
+  Indication                           indication optional,
+  TraceInformation                     traceInformation optional,
+  IP_Address_List                      iP_Addr optional,
+  RFSP_Index_List                      rFSP_Index optional,               
+  UE_TimeZone                          uE_TimeZone optional,
+  LocalDistinguishedName               lDN optional,
+  MDT_Configuration                    mDT_Configuration optional,
+  User_CSG_Information                 user_CSG_Information optional,
+  MonitoringEventInformation           monitoringEventInformation optional,
+  IntegerNumber                        uEUsageType optional,
+  SCEF_PDN_ConnectionGrouped_List      mME_US_SCEF_PDN_Connection optional,
+  RAT_Type                             rAT_Type optional,
+  ServingPLMNRateControl               servingPLMNRateControl optional,
+  Counter                              counter optional,
+  PrivateExtension_List                privateExtension optional 
+}with {    
+  variant(pDN_Connection) "REPEATABLE(yes)";
+  variant(fullyQualifiedTEID) "REPEATABLE(yes)";
+  variant(iP_Addr) "REPEATABLE(yes)";
+  variant(rFSP_Index) "REPEATABLE(yes)";    
+  variant(nodeName) "REPEATABLE(yes)";     
+  variant(mME_US_SCEF_PDN_Connection) "REPEATABLE(yes)";     
+};
+
+//7.3.7
+type set ContextAcknowledge
+{
+  Cause                                cause,
+  Indication                           indication optional,  //SGW change ind, israi
+  FullyQualifiedTEID                   fullyQualifiedTEID optional,
+  BearerContextGrouped_List            bearerContextGrouped optional, 
+  NodeNumber_List                      nodeNumber optional,
+  NodeIdentifier_List                  nodeIdentifier optional,
+  PrivateExtension_List                privateExtension optional
+}with {    
+  variant(bearerContextGrouped) "REPEATABLE(yes)";     
+  variant(nodeNumber) "REPEATABLE(yes)";     
+  variant(nodeIdentifier) "REPEATABLE(yes)";     
+};
+
+//7.3.8
+type set IdentificationRequest
+{
+  GUTI                                 gUTI optional,
+  UserLocationInfo                     uLI optional,
+  Packet_TMSI                          pTMSI optional,
+  P_TMSI_Signature                     pTMSI_Signature optional,
+  CompleteRequestMessage               complete_AttachRequestMessage optional, 
+  IP_Address                           addressForControlPlane optional,
+  PortNumber                 	       portNumber optional,
+  Hop_Counter                          hop_Counter optional,
+  ServingNetwork                       target_PLMN_ID optional, 
+  PrivateExtension_List                privateExtension optional
+};
+
+//7.3.9
+type set IdentificationResponse
+{
+  Cause                                cause,
+  IMSI                                 iMSI optional,
+  MM_Context                           mM_Context optional,
+  TraceInformation                     traceInformation optional,
+  IntegerNumber                        uEUsageType optional,
+  MonitoringEventInformation           monitoringEventInformation optional,
+  PrivateExtension_List                privateExtension optional
+};
+
+//7.3.10
+type set ForwardAccessContextNotification
+{
+  RAB_Context_List                     rAB_Contexts optional,      
+  Source_RNC_PDCP_Context_Info         source_RNC_PDCP_Context_Info optional,    
+  PDU_Numbers                          pDU_Numbers optional,
+  FullyQualifiedContainer              eUTRAN_TransparentContainer optional,
+  PrivateExtension_List                privateExtension optional
+}with {    
+  variant(rAB_Contexts) "REPEATABLE(yes)";    
+};
+
+
+//7.3.11
+type set ForwardAccessContextAcknowledge
+{
+  Cause                                cause,
+  PrivateExtension_List                privateExtension optional 
+}
+
+//7.3.12
+type set DetachNotification
+{
+  Cause                               cause,
+  DetachType                          detachType optional,
+  PrivateExtension_List               privateExtension optional
+}
+
+//7.3.13
+type set DetachAcknowledge
+{
+  Cause                               cause,
+  Recovery                            recovery optional, 
+  PrivateExtension_List               privateExtension optional
+};
+
+//7.3.14
+type set ChangeNotificationRequest
+{
+  IMSI                                iMSI optional,
+  MEI                                 mEI optional,  
+  Indication                          indication optional,
+  RAT_Type                            rAT_Type, 
+  UserLocationInfo                    uLI optional, 
+  User_CSG_Information                user_CSG_Information optional,
+  IP_Address                          gTPC_IP_Address optional,
+  EPS_BearerID                        linkedBearerIdentity optional,
+  PresenceReportingAreaInformation_List presenceReportingAreaInformation optional,
+  Counter                             counter optional,
+  Secondary_RAT_UsageDataReport_List  secondary_RAT_UsageDataReport optional,
+  PrivateExtension_List               privateExtension optional
+}with {    
+  variant(presenceReportingAreaInformation) "REPEATABLE(yes)";    
+  variant(secondary_RAT_UsageDataReport) "REPEATABLE(yes)";    
+};
+
+//7.3.15
+//6.1.1 - Only the Cause information element, optionally Protocol Configuration Options and optionally the Recovery information element 
+//shall be included in the response if the Cause contains a value indicating that the request is not accepted.
+type set ChangeNotificationResponse
+{
+  IMSI                                iMSI optional,
+  MEI                                 mEI optional,  
+  Cause                               cause,
+  ChangeReportingAction               changeReportingAction optional,  
+  CSG_InformationReportingAction      cSG_InformationReportingAction optional,
+  PresenceReportingAreaAction_List    presenceReportingAreaAction optional,
+  PrivateExtension_List               privateExtension optional
+}with {    
+  variant(presenceReportingAreaAction) "REPEATABLE(yes)";    
+};
+
+//7.3.16
+type set RelocationCancelRequest
+{
+  IMSI                                iMSI optional,
+  MEI                                 mEI optional,   
+  Indication                          indication optional, 
+  FullyQualifiedCause                 ranapCause optional,
+  PrivateExtension_List               privateExtension optional
+};
+
+//7.3.17
+type set RelocationCancelResponse
+{
+  Cause                               cause,
+  PrivateExtension_List               privateExtension optional
+};
+
+//7.3.18
+type set ConfigurationTransferTunnel
+{
+  FullyQualifiedContainer              eUTRAN_TransparentContainer, 
+  TargetIdentification                 targetENB_ID
+}
+
+//7.3.19
+type set RAN_InformationRelay
+{
+  FullyQualifiedContainer              bSS_Container,
+  TargetIdentification                 rIM_RoutingAddress optional,
+  PrivateExtension_List                privateExtension optional
+}
+
+//7.3.20
+type set ISR_StatusIndication
+{
+  ActionIndication                    actionIndication,
+  PrivateExtension_List               privateExtension optional 
+}
+
+//7.3.21
+type set UE_RegistrationQueryRequest
+{
+  IMSI                                iMSI,
+  PrivateExtension_List               privateExtension optional 
+}
+
+//7.3.22
+type set UE_RegistrationQueryResponse
+{
+  Cause                               cause,
+  IMSI                                iMSI,
+  PLMN_ID                             selectedCoreNetworkOperatorIdenifier,
+  PrivateExtension_List               privateExtension optional 
+}
+
+//7.4 Fallback Related messages
+
+//7.4.1
+type set SuspendNotification
+{
+  IMSI                                iMSI optional,
+  UserLocationInfo                    uLI optional,                
+  EPS_BearerID                        linkedEPS_BearerID optional,
+  Packet_TMSI                         pTMSI optional,
+  NodeType                            originatingNode optional,
+  IP_Address                          addressForControlPlane optional,
+  PortNumber                          uDPSourcePortNumber optional,
+  Hop_Counter                         hopCounter optional,
+  FullyQualifiedTEID                  senderF_TEIDForControlPlane optional,
+  PrivateExtension_List               privateExtension optional
+};
+
+//7.4.2
+type set SuspendAcknowledge
+{
+  Cause                               cause,
+  PrivateExtension_List               privateExtension optional
+};
+
+//7.4.3
+type set ResumeNotification
+{
+  IMSI                                iMSI,
+  EPS_BearerID                        linkedEPS_BearerID optional,
+  NodeType                            originatingNode optional,
+  FullyQualifiedTEID                  senderF_TEIDForControlPlane optional,
+  PrivateExtension_List               privateExtension optional
+};
+
+//7.4.4 
+type set ResumeAcknowledge
+{
+  Cause                               cause,
+  PrivateExtension_List               privateExtension optional
+};
+
+//7.4.5
+type set CSPagingIndication
+{
+  IMSI                                iMSI,
+  FullyQualifiedDomainName            vLR_Name,
+  TMSI                                tMSI optional,
+  UserLocationInfo                    locationAreaIdentifier optional,
+  GlobalCN_ID                         globalCN_ID optional, 
+  ChannelNeeded                       channelNeeded optional,
+  EMLPP_Priority                      eMLPP_Priority optional,
+  ServiceIndicator                    serviceIndicator optional,
+  PrivateExtension_List               privateExtension optional
+}; 
+
+//7.4.6
+type set AlertMMENotification
+{
+  PrivateExtension_List               privateExtension optional
+};
+
+//7.4.7 
+type set AlertMMEAcknowledge
+{
+  Cause                               cause,
+  PrivateExtension_List               privateExtension optional
+};
+
+//7.4.8
+type set UEActivityNotification
+{
+  PrivateExtension_List               privateExtension optional
+};
+
+//7.4.9 
+type set UEActivityAcknowledge
+{
+  Cause                               cause,
+  PrivateExtension_List               privateExtension optional
+};
+
+//Non-3GPP access related messages
+//7.5.1
+type set CreateForwardingTunnelRequest
+{
+  S103_PDF_List                       s103_PDF,
+  PrivateExtension_List               privateExtension optional
+} with {    
+  variant(s103_PDF) "REPEATABLE(yes)";    
+};
+
+//7.5.2   
+type set CreateForwardingTunnelResponse
+{
+  Cause                               cause,
+  S1_UDF_List                         s1_UDF optional,
+  PrivateExtension_List               privateExtension optional
+} with {    
+  variant(s1_UDF) "REPEATABLE(yes)";    
+}; 
+
+//Restoration and recovery
+//7.9.1
+type set DeletePDN_ConnectionSetRequest
+{
+  FullyQualifiedPDN_ConnectionSetID_List  csid optional, //MME, SGW, PGW, ePDG, TWAN
+  PrivateExtension_List                   privateExtension optional 
+} with {    
+  variant(csid) "REPEATABLE(yes)";     
+};
+
+//7.9.2
+type set DeletePDN_ConnectionSetResponse
+{
+  Cause                               cause,
+  PrivateExtension_List               privateExtension optional
+}
+
+//7.9.3
+type set UpdatePDN_ConnectionSetRequest
+{
+  FullyQualifiedPDN_ConnectionSetID_List  csid optional, //MME, SGW
+  PrivateExtension_List                   privateExtension optional
+} with {    
+  variant(csid) "REPEATABLE(yes)";     
+};
+
+
+//7.9.4
+type set UpdatePDN_ConnectionSetResponse
+{
+  Cause                               cause,
+  FullyQualifiedPDN_ConnectionSetID   csid optional, //PGW
+  PrivateExtension_List               privateExtension optional
+}
+
+//7.9.5
+type set PGW_RestartNotification
+{
+  IP_Address_List                        iP_Addr,//PGW, SGW
+  Cause					 cause optional,
+  PrivateExtension_List                  privateExtension optional
+}
+with {    
+  variant(iP_Addr) "REPEATABLE(yes)"; 
+};
+
+//7.9.6
+type set PGW_RestartNotificationAcknowledge
+{
+  Cause                               cause,
+  PrivateExtension_List               privateExtension optional
+}
+
+//7.9.7
+type set PGW_DownlinkTriggeringNotification
+{
+  IMSI                                iMSI,
+  IP_Address			      mME_S4_SGSN_Identifier optional,
+  FullyQualifiedTEID                  senderF_TEIDForControlPlane optional,
+  PrivateExtension_List               privateExtension optional
+}
+
+//7.9.8
+type set PGW_DownlinkTriggeringAcknowledge
+{
+  Cause				      cause,
+  IMSI                                iMSI optional,
+  IP_Address			      mME_S4_SGSN_Identifier optional,
+  PrivateExtension_List               privateExtension optional
+}
+
+
+// Trace Management Messages
+//7.12.1 
+type set TraceSessionActivation
+{
+  IMSI                                iMSI optional,
+  TraceInformation                    traceInformation,
+  MEI                                 mEI optional
+}
+
+//7.12.2
+type set TraceSessionDeactivation
+{
+  TraceReference                      traceReference
+}
+
+
+// MBMS Messages
+//7.13.1
+type set MBMSSessionStartRequest
+{
+  FullyQualifiedTEID                  fullyQualifiedTEID,
+  TMGI                                tMGI,
+  MBMS_SessionDuration                mBMS_SessionDuration,
+  MBMS_ServiceArea                    mBMS_ServiceArea,
+  MBMS_SessionIdentifier              mBMS_SessionIdentifier optional,
+  MBMS_FlowIdentifier                 mBMS_FlowIdentifier optional,
+  Bearer_QoS                          QoS_Profile,
+  MBMS_IPMulticastDistribution_List   mBMS_IPMulticastDistribution,
+  Recovery                            recovery optional,
+  MBMSTimetoDataTransfer              mBMSTimetoDataTransfer optional,
+  AbsoluteTimeofMBMSDataTransfer      mBMS_Data_Transfer_Start optional,
+  MBMSFlags                           mBMSFlags optional,
+  ECGI_List                           mBMSCellList optional,
+  PrivateExtension_List               privateExtension optional
+} with {    
+  variant(mBMS_IPMulticastDistribution) "REPEATABLE(yes)";     
+};
+
+//7.13.2
+type set MBMSSessionStartResponse
+{
+  Cause                               cause,
+  FullyQualifiedTEID_List             fullyQualifiedTEID optional,
+  MBMS_DistributionAcknowledge        mBMS_DistributionAcknowledge optional,
+  Recovery                            recovery optional,
+  PrivateExtension_List               privateExtension optional
+} with { 
+  variant(fullyQualifiedTEID) "REPEATABLE(yes)"; 
+};
+
+//7.13.3
+type set MBMSSessionUpdateRequest
+{
+  MBMS_ServiceArea                    mBMS_ServiceArea optional,
+  TMGI                                tMGI,
+  FullyQualifiedTEID                  fullyQualifiedTEID optional,
+  MBMS_SessionDuration                mBMS_SessionDuration,
+  Bearer_QoS                          QoS_Profile,
+  MBMS_SessionIdentifier              mBMS_SessionIdentifier optional,
+  MBMS_FlowIdentifier                 mBMS_FlowIdentifier optional,
+  MBMSTimetoDataTransfer              mBMSTimetoDataTransfer optional,
+  AbsoluteTimeofMBMSDataTransfer      mBMS_Data_Transfer_StartUpdateStop optional,  
+  ECGI_List                           mBMSCellList optional,
+  PrivateExtension_List               privateExtension optional
+}
+
+//7.13.4
+type set MBMSSessionUpdateResponse
+{
+  Cause                               cause,
+  MBMS_DistributionAcknowledge        mBMS_DistributionAcknowledge optional,
+  FullyQualifiedTEID                  fullyQualifiedTEID optional,
+  Recovery                            recovery optional,
+  PrivateExtension_List               privateExtension optional
+}
+
+//7.13.5
+type set MBMSSessionStopRequest
+{
+  MBMS_FlowIdentifier                 mBMS_FlowIdentifier optional,
+  AbsoluteTimeofMBMSDataTransfer      mBMS_Data_Transfer_Stop optional,   
+  PrivateExtension_List               privateExtension optional
+}
+
+//7.13.6
+type set MBMSSessionStopResponse
+{
+  Cause                               cause,
+  Recovery                            recovery optional, 
+  PrivateExtension_List               privateExtension optional
+}
+
+
+type union GTPCv2_PDUs {
+  EchoRequest                                  echoRequest,
+  EchoResponse                                 echoResponse,
+  VersionNotSupported                          versionNotSupported,
+  CreateSessionRequest                         createSessionRequest, 
+  CreateSessionResponse                        createSessionResponse,
+  CreateBearerRequest                          createBearerRequest,
+  CreateBearerResponse                         createBearerResponse,
+  BearerResourceCommand                        bearerResourceCommand,
+  BearerResourceFailureIndication              bearerResourceFailureIndication,
+  ModifyBearerRequest                          modifyBearerRequest,
+  ModifyBearerResponse                         modifyBearerResponse,
+  DeleteSessionRequest                         deleteSessionRequest,   
+  DeleteBearerRequest                          deleteBearerRequest,
+  DeleteSessionResponse                        deleteSessionResponse,
+  DeleteBearerResponse                         deleteBearerResponse,
+  DownlinkDataNotification                     downlinkDataNotification,
+  DownlinkDataNotificationAcknowledgement      downlinkDataNotificationAcknowledgement,
+  DownlinkDataNotificationFailureIndication    downlinkDataNotificationFailureIndication,
+  DeleteIndirectDataForwardingTunnelRequest    deleteIndirectDataForwardingTunnelRequest,
+  DeleteIndirectDataForwardingTunnelResponse   deleteIndirectDataForwardingTunnelResponse,
+  ModifyBearerCommand                          modifyBearerCommand,
+  ModifyBearerFailureIndication                modifyBearerFailureIndication,
+  UpdateBearerRequest                          updateBearerRequest,
+  UpdateBearerResponse                         updateBearerResponse,
+  DeleteBearerCommand                          deleteBearerCommand,
+  DeleteBearerFailureIndication                deleteBearerFailureIndication,  
+  CreateIndirectDataForwardingTunnelRequest    createIndirectDataForwardingTunnelRequest,
+  CreateIndirectDataForwardingTunnelResponse   createIndirectDataForwardingTunnelResponse,
+  ReleaseAccessBearersRequest                  releaseAccessBearersRequest,
+  ReleaseAccessBearersResponse                 releaseAccessBearersResponse,
+  StopPagingIndication                         stopPagingIndication,
+  ModifyAccessBearersRequest                   modifyAccessBearersRequest,
+  ModifyAccessBearersResponse                  modifyAccessBearersResponse,
+  RemoteUEReportNotification                   remoteUEReportNotification,
+  RemoteUEReportAcknowledge                    remoteUEReportAcknowledge,
+  ForwardRelocationRequest                     forwardRelocationRequest,
+  ForwardRelocationResponse                    forwardRelocationResponse,
+  ForwardRelocationCompleteNotification        forwardRelocationCompleteNotification,
+  ForwardRelocationCompleteAcknowledge         forwardRelocationCompleteAcknowledge,
+  ContextRequest                               contextRequest,
+  ContextResponse                              contextResponse,
+  ContextAcknowledge                           contextAcknowledge, 
+  IdentificationRequest                        identificationRequest,
+  IdentificationResponse                       identificationResponse,
+  ForwardAccessContextNotification             forwardAccessContextNotification,
+  ForwardAccessContextAcknowledge              forwardAccessContextAcknowledge,
+  DetachNotification                           detachNotification,
+  DetachAcknowledge                            detachAcknowledge,
+  ChangeNotificationRequest                    changeNotificationRequest,
+  ChangeNotificationResponse                   changeNotificationResponse,
+  RelocationCancelRequest                      relocationCancelRequest,
+  RelocationCancelResponse                     relocationCancelResponse,
+  ConfigurationTransferTunnel                  configurationTransferTunnel,
+  RAN_InformationRelay                         rAN_InformationRelay,
+  SuspendNotification                          suspendNotification,
+  SuspendAcknowledge                           suspendAcknowledge,
+  ResumeNotification                           resumeNotification,
+  ResumeAcknowledge                            resumeAcknowledge,
+  CSPagingIndication                           cSPagingIndication,
+  CreateForwardingTunnelRequest                createForwardingTunnelRequest,
+  CreateForwardingTunnelResponse               createForwardingTunnelResponse,
+  DeletePDN_ConnectionSetRequest               deletePDN_ConnectionSetRequest,
+  DeletePDN_ConnectionSetResponse              deletePDN_ConnectionSetResponse,
+  TraceSessionActivation                       traceSessionActivation,
+  TraceSessionDeactivation                     traceSessionDeactivation,
+  UpdatePDN_ConnectionSetRequest               updatePDN_ConnectionSetRequest,
+  UpdatePDN_ConnectionSetResponse              updatePDN_ConnectionSetResponse,
+  PGW_RestartNotification                      pGW_RestartNotification,
+  PGW_RestartNotificationAcknowledge           pGW_RestartNotificationAcknowledge,
+  PGW_DownlinkTriggeringNotification           pGW_DownlinkTriggeringNotification,
+  PGW_DownlinkTriggeringAcknowledge            pGW_DownlinkTriggeringAcknowledge,
+  AlertMMENotification                         alertMMENotification,
+  AlertMMEAcknowledge                          alertMMEAcknowledge,
+  UEActivityNotification                       uEActivityNotification,
+  UEActivityAcknowledge                        uEActivityAcknowledge,
+  MBMSSessionStartRequest                      mBMSSessionStartRequest,
+  MBMSSessionStartResponse                     mBMSSessionStartResponse,
+  MBMSSessionUpdateRequest                     mBMSSessionUpdateRequest,
+  MBMSSessionUpdateResponse                    mBMSSessionUpdateResponse,
+  MBMSSessionStopRequest                       mBMSSessionStopRequest,
+  MBMSSessionStopResponse                      mBMSSessionStopResponse,
+  ISR_StatusIndication                         iSR_StatusIndication,
+  UE_RegistrationQueryRequest                  uE_RegistrationQueryRequest,
+  UE_RegistrationQueryResponse                 uE_RegistrationQueryResponse
+}
+
+// TOP LEVEL GTPC PDU
+type record PDU_GTPCv2
+{
+  BIT2                           spare,   //0 
+  BIT1                           mp_Bit_or_Spare,
+  BIT1                           t_Bit,
+  BIT1                           p_Bit,
+  BIT3                           version,  //'010'B
+  OCT1                           messageType,
+  LIN2_BO_LAST                   lengthf, 
+  OCT4                           tEID optional,
+  OCT3                           sequenceNumber,
+  BIT4                           spare3, // 0
+  BIT4                           messagePriorityOrSpare, //any value between 0 and 15
+  GTPCv2_PDUs                    gtpcv2_pdu,
+  PDU_GTPCv2                     piggybackPDU_GTPCv2 optional
+}  with { 
+  variant (tEID) "PRESENCE(t_Bit = '1'B)";
+  variant (piggybackPDU_GTPCv2) "PRESENCE(p_Bit = '1'B)";   
+  variant (lengthf) "LENGTHTO(tEID,sequenceNumber,spare3,messagePriorityOrSpare,gtpcv2_pdu)";
+  variant (gtpcv2_pdu) "CROSSTAG( 
+  echoRequest,                                       messageType = '01'O; 
+  echoResponse,                                      messageType = '02'O; 
+  versionNotSupported,                               messageType = '03'O; 
+  createSessionRequest,                              messageType = '20'O;  //32 
+  createSessionResponse,                             messageType = '21'O;  //33  
+  createBearerRequest,                               messageType = '5F'O;  //95 
+  createBearerResponse,                              messageType = '60'O;  //96 
+  bearerResourceCommand,                             messageType = '44'O;  //68 
+  bearerResourceFailureIndication,                   messageType = '45'O;  //69 
+  modifyBearerRequest,                               messageType = '22'O;  //34
+  modifyBearerResponse,                              messageType = '23'O;  //35
+  deleteSessionRequest,                              messageType = '24'O;  //36    
+  deleteBearerRequest,                               messageType = '63'O;  //99
+  deleteSessionResponse,                             messageType = '25'O;  //37 
+  deleteBearerResponse,                              messageType = '64'O;  //100 
+  downlinkDataNotification,                          messageType = 'B0'O;  //176
+  downlinkDataNotificationAcknowledgement,           messageType = 'B1'O;  //177 
+  downlinkDataNotificationFailureIndication,         messageType = '46'O;  //70 
+  deleteIndirectDataForwardingTunnelRequest,         messageType = 'A8'O;  //168 
+  deleteIndirectDataForwardingTunnelResponse,        messageType = 'A9'O;  //169  
+  modifyBearerCommand,                               messageType = '40'O;  //64
+  modifyBearerFailureIndication,                     messageType = '41'O;  //65
+  updateBearerRequest,                               messageType = '61'O;  //97 
+  updateBearerResponse,                              messageType = '62'O;  //98 
+  deleteBearerCommand,                               messageType = '42'O;  //66
+  deleteBearerFailureIndication,                     messageType = '43'O;  //67 
+  createIndirectDataForwardingTunnelRequest,         messageType = 'A6'O;  //166 
+  createIndirectDataForwardingTunnelResponse,        messageType = 'A7'O;  //167 
+  releaseAccessBearersRequest,                       messageType = 'AA'O;  //170
+  releaseAccessBearersResponse,                      messageType = 'AB'O;  //171 
+  stopPagingIndication,                              messageType = '49'O;  //73 
+  modifyAccessBearersRequest,                        messageType = 'D3'O;  //211
+  modifyAccessBearersResponse,                       messageType = 'D4'O;  //212
+  remoteUEReportNotification,                        messageType = '28'O;  //40
+  remoteUEReportAcknowledge,                         messageType = '29'O;  //41
+  forwardRelocationRequest,                          messageType = '85'O;  //133
+  forwardRelocationResponse,                         messageType = '86'O;  //134
+  forwardRelocationCompleteNotification,             messageType = '87'O;  //135 
+  forwardRelocationCompleteAcknowledge,              messageType = '88'O;  //136 
+  contextRequest,                                    messageType = '82'O;  //130 
+  contextResponse,                                   messageType = '83'O;  //131
+  contextAcknowledge,                                messageType = '84'O;  //132 
+  identificationRequest,                             messageType = '80'O;  //128
+  identificationResponse,                            messageType = '81'O;  //129
+  forwardAccessContextNotification,                  messageType = '89'O;  //137
+  forwardAccessContextAcknowledge,                   messageType = '8A'O;  //138 
+  detachNotification,                                messageType = '95'O;  //149 
+  detachAcknowledge,                                 messageType = '96'O;  //150 
+  changeNotificationRequest,                         messageType = '26'O;  //38
+  changeNotificationResponse,                        messageType = '27'O;  //39
+  relocationCancelRequest,                           messageType = '8B'O;  //139
+  relocationCancelResponse,                          messageType = '8C'O;  //140
+  configurationTransferTunnel,                       messageType = '8D'O;  //141
+  rAN_InformationRelay,                              messageType = '98'O;  //152 
+  suspendNotification,                               messageType = 'A2'O;  //162 
+  suspendAcknowledge,                                messageType = 'A3'O;  //163 
+  resumeNotification,                                messageType = 'A4'O;  //164
+  resumeAcknowledge,                                 messageType = 'A5'O;  //165
+  cSPagingIndication,                                messageType = '97'O;  //151 
+  createForwardingTunnelRequest,                     messageType = 'A0'O;  //160 
+  createForwardingTunnelResponse,                    messageType = 'A1'O;  //161 
+  deletePDN_ConnectionSetRequest,                    messageType = '65'O;  //101
+  deletePDN_ConnectionSetResponse,                   messageType = '66'O;  //102
+  traceSessionActivation,                            messageType = '47'O;  //71
+  traceSessionDeactivation,                          messageType = '48'O;  //72 
+  updatePDN_ConnectionSetRequest,                    messageType = 'C8'O;  //200
+  updatePDN_ConnectionSetResponse,                   messageType = 'C9'O;  //201
+  pGW_RestartNotification,                           messageType = 'B3'O;  //179
+  pGW_RestartNotificationAcknowledge,                messageType = 'B4'O;  //180
+  pGW_DownlinkTriggeringNotification,                messageType = '67'O;  //103
+  pGW_DownlinkTriggeringAcknowledge,                 messageType = '68'O;  //104
+  alertMMENotification,                              messageType = '99'O;  //153
+  alertMMEAcknowledge,                               messageType = '9A'O;  //154
+  uEActivityNotification,                            messageType = '9B'O;  //155
+  uEActivityAcknowledge,                             messageType = '9C'O;  //156
+  iSR_StatusIndication,                              messageType = '9D'O;  //157
+  uE_RegistrationQueryRequest,                       messageType = '9E'O;  //158
+  uE_RegistrationQueryResponse,                      messageType = '9F'O;  //159
+  mBMSSessionStartRequest,                           messageType = 'E7'O;  //231
+  mBMSSessionStartResponse,                          messageType = 'E8'O;  //232
+  mBMSSessionUpdateRequest,                          messageType = 'E9'O;  //233
+  mBMSSessionUpdateResponse,                         messageType = 'EA'O;  //234
+  mBMSSessionStopRequest,                            messageType = 'EB'O;  //235
+  mBMSSessionStopResponse,                           messageType = 'EC'O;  //236
+  )";                          
+};
+
+
+
+} with { encode "RAW"} // End of module
diff --git a/test/GTPv2_Test.cfg b/test/GTPv2_Test.cfg
new file mode 100644
index 0000000..0e52a1b
--- /dev/null
+++ b/test/GTPv2_Test.cfg
@@ -0,0 +1,5 @@
+[LOGGING]
+FileMask := LOG_ALL | TTCN_MATCHING
+
+[EXECUTE]
+GTPv2_Test.control
diff --git a/test/GTPv2_Test.ttcn b/test/GTPv2_Test.ttcn
new file mode 100644
index 0000000..cf0ce6e
--- /dev/null
+++ b/test/GTPv2_Test.ttcn
@@ -0,0 +1,1877 @@
+///////////////////////////////////////////////////////////////////////////////
+// Copyright (c) 2000-2018 Ericsson Telecom AB
+// All rights reserved. This program and the accompanying materials
+// are made available under the terms of the Eclipse Public License v2.0
+// which accompanies this distribution, and is available at
+// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+///////////////////////////////////////////////////////////////////////////////
+//
+//  File:               GTPv2_Test.ttcn
+//  Description:        GTPv2 15.2.0 protocol module example test
+//  Rev:                <RnXnn>
+//  Prodnr:             CNL 113 870
+//  Contact:            http://ttcn.ericsson.se
+///////////////////////////////////////////////////////////////////////////////
+
+module GTPv2_Test
+{
+
+import from GTPv2_Types all;
+
+type component ct_GTPv2{}
+
+
+template PDU_GTPCv2 t_pdu_gtpcv2 (octetstring pl_messageType,GTPCv2_PDUs pl_pdu) :={
+  spare := '00'B, 
+  mp_Bit_or_Spare := '1'B,
+  t_Bit := '0'B,
+  p_Bit := '0'B,
+  version := '010'B, 
+  messageType := pl_messageType,
+  lengthf := 0, 
+  tEID := omit,
+  sequenceNumber := '000000'O,
+  spare3 := '0000'B, // 0
+  messagePriorityOrSpare := '0001'B,
+  gtpcv2_pdu := pl_pdu,
+  piggybackPDU_GTPCv2 := omit
+}
+//Echo Request, Echo Response and Version Not Supported Indication messages 
+template PDU_GTPCv2 t_pdu_gtpcv2_2 (octetstring pl_messageType,GTPCv2_PDUs pl_pdu) modifies t_pdu_gtpcv2:={
+  mp_Bit_or_Spare := '0'B,
+  messageType := pl_messageType,
+  lengthf := 0, 
+  messagePriorityOrSpare := '0000'B,
+  gtpcv2_pdu := pl_pdu
+}
+
+template PDU_GTPCv2 t_m_pdu_gtpcv2 (octetstring pl_messageType,GTPCv2_PDUs pl_pdu) modifies t_pdu_gtpcv2 := {
+  lengthf := ?
+}
+
+template PDU_GTPCv2 t_m_pdu_gtpcv2_2 (octetstring pl_messageType,GTPCv2_PDUs pl_pdu) modifies t_pdu_gtpcv2_2 := {
+  lengthf := ?
+}
+
+template AccessPointName t_accessPointName := {
+  elementIdentifier := '47'O,
+  lengthIndicator := 4,
+  instance := '0000'B,
+  spare := '0000'B,
+  aPN_Value := 'AAAAAAAA'O
+}
+
+template AggregateMaximumBitRate t_ambr := {
+  elementIdentifier := '48'O,
+  lengthIndicator := 8,
+  instance := '0000'B,
+  spare := '0000'B,
+  aPN_AMBR_for_uplink := 'AAAAAAAA'O, 
+  aPN_AMBR_for_downlink := 'BBBBBBBB'O
+}
+
+template Cause t_cause := {
+  elementIdentifier := '02'O,
+  lengthIndicator := 2,
+  instance := '0000'B,
+  spare := '0000'B,
+  causeValue := '02'O,
+  cS := '1'B,
+  bCE := '1'B,
+  pCE := '1'B,
+  spare2 := '11111'B,
+  typeOfOffendingIE := omit,
+  lengthIndicator2  := omit,
+  instanceOfOffendingIE  := omit,
+  spare3  := omit	   
+};
+
+template RAN_NASCause t_RAN_NASCause1 := {
+  elementIdentifier := 'AC'O,
+  lengthIndicator := 2,
+  instance := '0000'B,
+  spare := '0000'B,
+  causeType := '0001'B,
+  protocolType := '0001'B,
+  causeValue := 'AA'O,
+  additionalOctets := omit
+}
+template RAN_NASCause t_RAN_NASCause2 modifies t_RAN_NASCause1 := {
+  causeValue := 'BB'O
+}
+  
+template BearerContextGrouped t_m_bearerContextGrouped (
+  template Cause pl_cause := t_cause,
+  template RAN_NASCause pl_RAN_NASCause1 := t_RAN_NASCause1,
+  template RAN_NASCause pl_RAN_NASCause2 := t_RAN_NASCause2)
+  modifies t_bearerContextGrouped:= {
+  lengthIndicator := 18,
+  bearerContextIEs :=
+  {	  
+    rAN_NASCause := {pl_RAN_NASCause1,pl_RAN_NASCause2}
+  }
+}
+
+
+template BearerContextGrouped t_bearerContextGrouped (template Cause pl_cause := t_cause):= {
+  elementIdentifier := '5D'O,
+  lengthIndicator := 6,
+  instance := '0000'B,  
+  spare := '0000'B,
+  bearerContextIEs :=
+  {	  
+    ePS_Bearer_ID := omit,
+    cause := pl_cause,
+    ePS_Bearer_TFT := omit,
+    fullyQualifiedTEID := omit,
+    bearerLevel_QoS := omit,
+    chargingID := omit,
+    bearerFlags := omit,
+    transactionIdentifier := omit,
+    protocolConfigOptions := omit,
+    rAN_NASCause := omit,
+    additionalProtocolConfigOptions := omit,
+    extendedProtocolConfigOptions := omit
+  }
+}
+
+template CNOperatorSelectionEntity t_cNOperatorSelectionEntity := {
+  elementIdentifier := 'AD'O,
+  lengthIndicator := 1,
+  instance := '0000'B,  
+  spare := '0000'B,
+  selectionEntity := '01'B,
+  spare2 := '000000'B,
+  additionalOctets := omit
+}
+  
+template EPC_Timer t_ePCTimer := {
+  elementIdentifier := '9C'O,
+  lengthIndicator := 1,
+  instance := '1111'B,
+  spare := '0000'B,
+  timerValue := 2,
+  timerUnit := '111'B,
+  additionalOctets := omit
+}
+
+template EPS_BearerID t_ePS_BearerID := {
+  elementIdentifier := '49'O,
+  lengthIndicator := 1,
+  instance := '1111'B,
+  spare := '0000'B,
+  ePS_Bearer_ID_Value := 4,
+  spare2 := '0000'B,
+  additionalOctets := omit
+}
+template  FullyQualifiedTEID t_fullyQualifiedTEID:= {
+  elementIdentifier := '57'O,
+  lengthIndicator := 9,
+  instance := '0000'B,
+  spare := '0000'B,
+  interfaceType := 24,        
+  v6_Flag := '0'B,
+  v4_Flag := '1'B,
+  tEID_GRE_Key := '00000003'O,
+  iPv4_Address := '1F801238'O,
+  iPv6_Address := omit,
+  additionalOctets := omit
+}
+
+template IMSI t_iMSI := {
+  elementIdentifier := '01'O,
+  lengthIndicator := 8,
+  instance := '0000'B,
+  spare := '0000'B,
+  iMSI_Value := '12345678901234F5'H
+}            
+
+template Indication t_indicationFlags := {
+  elementIdentifier := '4D'O,
+  lengthIndicator := 7,
+  instance := '0000'B,
+  spare :=  '0000'B,
+  sGWCI := '1'B,
+  iSRAI := '1'B,
+  iSRSI := '1'B,
+  oI := '1'B,	      
+  dFI := '1'B,
+  hI := '1'B,
+  dTF := '1'B,
+  dAF := '1'B,
+  mSV := '1'B,
+  sI := '1'B,
+  pT := '1'B,
+  pBit := '1'B,
+  cRSI := '1'B,
+  cFSI := '1'B,
+  uIMSI := '1'B,
+  sQCI := '1'B,
+  cCRSI := '1'B,
+  iSRAU := '1'B,
+  mBMDT := '1'B,
+  s4AF := '1'B,
+  s6AF := '1'B, 
+  sRNI := '1'B,
+  pBIC := '1'B,
+  retLoc := '1'B,
+  cPSR := '1'B,
+  cLII := '1'B,
+  cSFBI := '1'B,	 	 	 
+  pPSI := '1'B, 
+  pPON_PPEI := '1'B, 
+  pPOF := '1'B, 
+  aRRL := '1'B, 
+  cPRAI := '1'B, 
+  aOPI := '1'B, 
+  aOSI := '1'B, 
+  pCRI := '1'B,
+  pSCI := '1'B,  
+  bDWI := '1'B,
+  dTCI := '1'B,
+  uASI := '1'B,
+  nSI := '1'B,
+  wPMSI := '1'B,
+  uNACCSI := '1'B,
+  pNSI := '1'B,
+  s11TF := '1'B,
+  pMTSMI := '1'B,
+  cPOPCI := '1'B,
+  ePCOSI := '1'B,
+  rOAAI := '1'B,
+  tSPCMI := '0'B, 
+  eNBCRSI  := '0'B,
+  spare_1 := '0'B, 
+  spare_2 := '0'B, 
+  spare_3 := '0'B, 
+  spare_4 := '0'B, 
+  spare_5 := '0'B, 
+  spare_6 := '0'B, 
+  additionalOctets := omit          
+}; 
+
+template Indication t_indicationFlags2 := {
+  elementIdentifier := '4D'O,
+  lengthIndicator := 2,
+  instance := '0000'B,
+  spare :=  '0000'B,
+  sGWCI := '1'B,
+  iSRAI := '1'B,
+  iSRSI := '1'B,
+  oI := '1'B,	      
+  dFI := '1'B,
+  hI := '1'B,
+  dTF := '1'B,
+  dAF := '1'B,
+  mSV := '1'B,
+  sI := '1'B,
+  pT := '1'B,
+  pBit := '1'B,
+  cRSI := '1'B,
+  cFSI := '1'B,
+  uIMSI := '1'B,
+  sQCI := '1'B,
+  cCRSI := omit,
+  iSRAU := omit,
+  mBMDT := omit,
+  s4AF := omit,
+  s6AF := omit, 
+  sRNI := omit,
+  pBIC := omit,
+  retLoc := omit,
+  cPSR := omit,
+  cLII := omit,
+  cSFBI := omit,	 	 	 
+  pPSI := omit, 
+  pPON_PPEI := omit, 
+  pPOF := omit, 
+  aRRL := omit, 
+  cPRAI := omit, 
+  aOPI := omit, 
+  aOSI := omit, 
+  pCRI := omit,
+  pSCI := omit,  
+  bDWI := omit,
+  dTCI := omit,
+  uASI := omit,
+  nSI := omit,
+  wPMSI := omit,
+  uNACCSI := omit,
+  pNSI := omit,
+  s11TF := omit,
+  pMTSMI := omit,
+  cPOPCI := omit,
+  ePCOSI := omit,
+  rOAAI := omit,
+  tSPCMI := omit,
+  eNBCRSI := omit,
+  spare_1 := omit,
+  spare_2 := omit,
+  spare_3 := omit,
+  spare_4 := omit,
+  spare_5 := omit,
+  spare_6 := omit,
+  additionalOctets := omit          
+}; 
+
+template IP_Address t_IP_Address := {
+  elementIdentifier := '4A'O,
+  lengthIndicator := 4,
+  instance := '1111'B,
+  spare := '0000'B,
+  iPv4_IPv6_Address := {
+    iPv4_Address := '01020304'O
+  }
+}
+
+template IPv4ConfigurationPrameters t_IPv4ConfigurationPrameters := {
+  elementIdentifier := 'A6'O,
+  lengthIndicator := 5,
+  instance := '1111'B,
+  spare := '0000'B,
+  subnetPrefixLength := 1,
+  iPv4DefaultRouterAddress := '01020304'O,
+  additionalOctets := omit          
+}
+  
+template LoadControlInformationGrouped t_loadControlInformationGrouped (template SequenceNumber pl_sequenceNumber := t_sequenceNumber,template  Metric pl_metric := t_metric):= {
+  elementIdentifier := 'B5'O,
+  lengthIndicator := 13,
+  instance := '1111'B,
+  spare := '0000'B,
+  loadControlInformationIEs := {
+    loadControlSequenceNumber := pl_sequenceNumber,
+    loadMetric := pl_metric,
+    listOfAPNandRelativeCapacity := omit
+  }
+}
+
+template Metric t_metric := {
+  elementIdentifier := 'B6'O,
+  lengthIndicator := 1,
+  instance := '1111'B,
+  spare := '0000'B,
+  metric := 10
+}
+
+template NodeIdentifier t_nodeIdentifier := {
+  elementIdentifier := 'B0'O,   
+  lengthIndicator := 10,
+  instance := '1111'B,
+  spare := '0000'B,
+  lenghOfNodeName := 4,
+  nodeName := '01020304'O,
+  lenghOfNodeRealm := 4,
+  nodeRealm := '01020304'O,
+  additionalOctets := omit 
+}
+
+template NodeNumber t_nodeNumber := {
+  elementIdentifier := 'AF'O,   
+  lengthIndicator := 5,
+  instance := '1111'B,
+  spare := '0000'B,
+  lenghOfNodeNumber := 4,
+  nodeNumber := '01020304'O,
+  additionalOctets := omit 
+}
+
+template OverloadControlInformationGrouped t_overloadControlInformationGrouped (template SequenceNumber pl_sequenceNumber := t_sequenceNumber,template Metric pl_metric := t_metric,template  EPC_Timer pl_ePCTimer := t_ePCTimer):= {
+  elementIdentifier := 'B4'O,
+  lengthIndicator := 18,
+  instance := '1111'B,
+  spare := '0000'B,
+  overloadControlInformationIEs := {
+    overloadControlSequenceNumber := pl_sequenceNumber,
+    overloadReductionMetric := pl_metric,
+    periodOfValidity := pl_ePCTimer,
+    listOfAccessPointName := omit
+  }
+
+}
+
+template PresenceReportingAreaAction t_presenceReportingAreaAction := {
+  elementIdentifier := 'B1'O,
+  lengthIndicator := 69,
+  instance := '1111'B,
+  spare := '0000'B,
+  actionField := '111'B,
+  iNAPRA := '1'B,
+  spare2 := '0000'B,
+  presenceReportingAreaIdentifier := '010203'O,
+  numberOfRAI := 1,
+  numberOfTAI := 1,
+  numberOfMacroENodeB := 1,
+  spare3 := '00'B,
+  numberOfHomeENodeB := 1,
+  spare4 := '00'B,
+  numberOfECGI := 1,
+  spare5 := '00'B,
+  numberOfSAI := 1,
+  spare6 := '00'B,
+  numberOfCGI := 1,
+  spare7 := '00'B,
+  tAIs := {
+    {
+      mccDigit1 := '2'H,
+      mccDigit2 := '4'H,
+      mccDigit3 := '0'H,
+      mncDigit3 := 'F'H,
+      mncDigit1 := '9'H,
+      mncDigit2 := '9'H,
+      tAC := '0102'O
+    }
+  },
+  macroENBIDs := {
+    {
+      mccDigit1 := '2'H,
+      mccDigit2 := '4'H,
+      mccDigit3 := '0'H,
+      mncDigit3 := 'F'H,
+      mncDigit1 := '9'H,
+      mncDigit2 := '9'H,
+      spare2 := '0000'B,
+      targetID := '00110011001100110011'B
+    }
+  },
+  homeENBIDs := {
+    {
+      mccDigit1 := '2'H,
+      mccDigit2 := '4'H,
+      mccDigit3 := '0'H,
+      mncDigit3 := 'F'H,
+      mncDigit1 := '9'H,
+      mncDigit2 := '9'H,
+      spare2 := '0000'B,
+      targetID := '0011001100110011001100110011'B
+    }
+  },
+  eCGIs := {
+    {
+      mccDigit1 := '2'H,
+      mccDigit2 := '4'H,
+      mccDigit3 := '0'H,
+      mncDigit3 := 'F'H,
+      mncDigit1 := '9'H,
+      mncDigit2 := '9'H,
+      spare := '0'H,
+      eCI := 123
+    }
+  },
+  rAIs := {
+    {
+      mccDigit1 := '2'H,
+      mccDigit2 := '4'H,
+      mccDigit3 := '0'H,
+      mncDigit3 := 'F'H,
+      mncDigit1 := '9'H,
+      mncDigit2 := '9'H,
+      lAC := '0102'O,
+      rAC := '0304'O
+    }
+  },
+  sAIs := {
+    {
+      mccDigit1 := '2'H,
+      mccDigit2 := '4'H,
+      mccDigit3 := '0'H,
+      mncDigit3 := 'F'H,
+      mncDigit1 := '9'H,
+      mncDigit2 := '9'H,
+      lAC := '0102'O,
+      sAC := '0304'O
+    }
+  },
+  cGIs := {
+    {
+      mccDigit1 := '2'H,
+      mccDigit2 := '4'H,
+      mccDigit3 := '0'H,
+      mncDigit3 := 'F'H,
+      mncDigit1 := '9'H,
+      mncDigit2 := '9'H,
+      lAC := '0102'O,
+      cI := '0304'O
+    }
+  },
+  numberOfExtendedMacroENODEB := 2,
+  spare8 := '00'B,
+  extendedMacroENBIDs := {
+    {
+      mccDigit1 := '2'H,
+      mccDigit2 := '4'H,
+      mccDigit3 := '0'H,
+      mncDigit3 := 'F'H,
+      mncDigit1 := '9'H,
+      mncDigit2 := '9'H,
+      spare := '00'B,
+      sMeNB := '0'B,
+      targetID  := '000000000000000000001'B
+    },
+    {
+      mccDigit1 := '2'H,
+      mccDigit2 := '4'H,
+      mccDigit3 := '0'H,
+      mncDigit3 := 'F'H,
+      mncDigit1 := '9'H,
+      mncDigit2 := '9'H,
+      spare := '00'B,
+      sMeNB := '0'B,
+      targetID  := '000000000000000000011'B
+    }
+  },
+  additionalOctets :=  omit
+}
+
+template PresenceReportingAreaAction t_presenceReportingAreaAction2 := {
+  elementIdentifier := 'B1'O,
+  lengthIndicator := 10,
+  instance := '1111'B,
+  spare := '0000'B,
+  actionField := '111'B,
+  iNAPRA := '1'B,
+  spare2 := '0000'B,
+  presenceReportingAreaIdentifier := '010203'O,
+  numberOfRAI := 0,
+  numberOfTAI := 0,
+  numberOfMacroENodeB := 0,
+  spare3 := '00'B,
+  numberOfHomeENodeB := 0,
+  spare4 := '00'B,
+  numberOfECGI := 0,
+  spare5 := '00'B,
+  numberOfSAI := 0,
+  spare6 := '00'B,
+  numberOfCGI := 0,
+  spare7 := '00'B,
+  tAIs := omit,
+  macroENBIDs := omit,
+  homeENBIDs := omit,
+  eCGIs := omit,
+  rAIs := omit,
+  sAIs := omit,
+  cGIs := omit,
+  numberOfExtendedMacroENODEB := omit,
+  spare8 := omit,
+  extendedMacroENBIDs := omit,
+  additionalOctets :=  omit
+}
+
+template PresenceReportingAreaInformation t_presenceReportingAreaInformation := {
+  elementIdentifier := 'B2'O,
+  lengthIndicator := 12,
+  instance := '0000'B,
+  spare := '0000'B,
+  presenceReportingAreaIdentifier := '010203'O,
+  iPRA := '1'B,
+  oPRA := '0'B,
+  aPRA := '1'B,
+  iNAPRA  := '0'B, 
+  spare2 := '0000'B,
+  additionalPRA := {
+    additionalPRA_Identifier := '000001'O,
+    iPRA := '1'B,
+    oPRA := '0'B,
+    aPRA := '1'B,
+    spare := '00000'B,
+    additionalPRA := 
+    {
+      additionalPRA_Identifier := '000002'O,
+      iPRA := '1'B,
+      oPRA := '0'B,
+      aPRA := '0'B,
+      spare := '00000'B,
+      additionalPRA := omit
+    }
+  },
+  additionalOctets := omit 
+}
+
+template ProcedureTransactionID t_procedureTransactionID := {
+  elementIdentifier := '64'O,   
+  lengthIndicator := 1,
+  instance := '1111'B,
+  spare := '0000'B,
+  pTI_Value := 5,
+  additionalOctets := omit 
+}
+
+template RAN_NASCause t_rAN_NASCause := { 
+  elementIdentifier := 'AC'O,   
+  lengthIndicator := 2,
+  instance := '1111'B,
+  spare := '0000'B,
+  causeType := '1010'B,
+  protocolType := '1010'B,
+  causeValue := '01'O,
+  additionalOctets := omit 
+}
+
+template RAT_Type t_ratType := {
+  elementIdentifier := '52'O,   
+  lengthIndicator := 1,
+  instance := '1111'B,
+  spare := '0000'B,
+  rAT_TypeValue := 5,
+  additionalOctets := omit 
+}
+
+template SequenceNumber t_sequenceNumber := {
+  elementIdentifier := 'B7'O,
+  lengthIndicator := 4,
+  instance := '1111'B,
+  spare := '0000'B,
+  sequenceNumber := 4
+}
+
+template TrustedWLANAccessNetworkIdentifier t_trustedWLANAccessNetworkIdentifier := {
+  elementIdentifier := 'A9'O,
+  lengthIndicator := 3,
+  instance := '0000'B,
+  spare := '0000'B,
+  bssIdIndicator := '0'B,
+  cIVAI := '1'B,
+  pLMNI := '1'B,
+  oPNAI := '1'B,
+  lAAI := '1'B,
+  spare2 := '000'B,
+  lengthOfSSID := 1,
+  SSID := 'AA'O,
+  BSSID := omit,
+  lengthOfCivicAddress :=  1,
+  civicAddressInformation :=  '01'O,
+  tWAN_PLMNID := '01020304'O,
+  lengthOfTWANOperatorName :=  1,
+  tWANOperatorName :=  '01'O,
+  relayIdentityType :=  1,
+  lengthOfRelayIdentity := 4,
+  relayIdentity := '01020304'O,
+  lengthOfcircuitID := 1,
+  circuitID := '01'O,
+  additionalOctets := omit
+}
+template TrustedWLANModeIndication t_trustedWLANModeIndication := {
+  elementIdentifier := 'AE'O,
+  lengthIndicator := 1,
+  instance := '0000'B,
+  spare := '0000'B,
+  sCM := '0'B,
+  mCM := '1'B,
+  spare2 := '000000'B,
+  additionalOctets := omit
+}
+
+template TWANIdentifierTimestamp t_tWANIdentifierTimestamp := {
+  elementIdentifier := 'B3'O,
+  lengthIndicator := 4,
+  instance := '0000'B,
+  spare := '0000'B,
+  tWANIdentifierTimestampValue := '01020304'O,
+  additionalOctets := omit
+}
+
+template MDT_Configuration t_mDT_Configuration := {
+  elementIdentifier := 'A2'O,
+  lengthIndicator:= 17,
+  instance:= '0000'B,
+  spare:= '0000'B,
+  jobType:= '01'O,
+  listOfmeasurements:= '01020304'O,
+  reportingTrigger:= '01'O,
+  reportInterval:= '02'O,
+  reportAmount:= '03'O,
+  eventThresholdforRSRP:= '04'O,  
+  eventThresholdforRSRQ:='05'O ,
+  lengthOfAreaScope:= 0,
+  areaScope := omit,
+  cRRMI:= '0'B,
+  mPI:= '1'B,
+  pMI:= '0'B,
+  pLI:= '1'B,
+  spare2:= '0000'B,
+  collectionPeriodforRRMmeasurementsLTE := omit,
+  measurementPeriodLTE := min1,
+  positioningMethod := omit,
+  numberOfMDT_PLMNs := 1,
+  mDT_PLMN_List  := {'010203'O},
+  additionalOctets := omit
+}
+template SCEF_PDN_ConnectionGrouped_List t_sCEF_PDN_ConnectionGrouped_List :=
+{
+  {
+    elementIdentifier := 'C3'O,
+    lengthIndicator:= 27,
+    instance:= '0000'B,
+    spare:= '0000'B,
+    sCEF_PDN_ConnectionIEs :=
+    {
+      accessPointName := valueof(t_accessPointName),
+      ePS_BearerID := valueof(t_ePS_BearerID),
+      nodeIdentifier := valueof(t_nodeIdentifier)
+    }
+  }
+}
+  
+template PDN_ConnectionGrouped_List t_pDN_ConnectionGrouped_List := 
+{
+  {
+    elementIdentifier := '6D'O,
+    lengthIndicator:= 5,
+    instance:= '0000'B,
+    spare:= '0000'B,
+    pDN_Connection_IEs :=
+    {
+      accessPointName :=  omit,
+      iP_Address := omit,
+      linkedEPS_Bearer_ID := omit,
+      fullyQualifiedTEID := omit,
+      fullyQualifiedDomainName := omit,
+      bearerContexts := omit,
+      apn_ambr := omit,
+      chargingCharacteristics := omit,
+      aPN_Restriction := omit,
+      selectionMode := omit,
+      changeReportingAction := omit,
+      cSG_InformationReportingAction := omit,
+      heNBInformationReporting := omit,
+      indicationFlags := omit,
+      signallingPriorityIndication := omit,
+      changeToReportFlags := omit,
+      presenceReportingAreaAction := omit,
+      wLANOffloadabilityIndication :=
+      {
+        elementIdentifier := 'B9'O,
+        lengthIndicator := 1,
+        instance := '0000'B,
+        spare := '0000'B,
+        uTRANIndication := '0'B,
+        eUTRANIndication := '0'B,
+        spare2 := '000000'B,
+        additionalOctets := omit
+      },
+      remoteUEContext := omit,
+      pDN_Type := omit,
+      headerCompressionConfiguration := omit
+    }
+  }
+}
+
+template MillisecondTimeStamp t_millisecondTimeStamp :=
+{
+  elementIdentifier := 'BC'O,
+  lengthIndicator := 6,
+  instance:= '0000'B,
+  spare:= '0000'B,
+  millisecondTimeStampValue := '000000001234'O,
+  additionalOctets := omit
+}
+
+template IntegerNumber t_integerNumber :=
+{
+  elementIdentifier := 'BB'O,
+  lengthIndicator := 2,
+  instance:= '0000'B,
+  spare:= '0000'B,
+  integerNumberValue := {int2 := 5}
+}
+
+template FullyQualifiedContainer t_nBIFOMContainer :=
+{
+  elementIdentifier := '76'O,
+  lengthIndicator := 5,
+  instance:= '0000'B,
+  spare:= '0000'B,
+  containerType := 4,
+  spare2:= '0000'B,
+  f_ContainerField := {nBIFOM_Container := '01020304'O}
+}
+
+template RemoteUEContextGrouped_List t_remoteUEContextGrouped :=
+{
+  {
+    elementIdentifier := 'BF'O,
+    lengthIndicator := 6,
+    instance:= '0000'B,
+    spare:= '0000'B,
+    remoteUEContextIEs := 
+    {
+      remoteUserID := omit,
+      remoteUEIPInformation :=
+      {
+        elementIdentifier := 'C1'O,
+        lengthIndicator := 2,
+        instance:= '0000'B,
+        spare:= '0000'B,
+        remoteUEIPInformation := 'f001'O
+      }
+    }
+  }
+}
+
+template ExtendedProtocolConfigOptions t_extendedProtocolConfigOptions :=
+{
+  elementIdentifier := 'C5'O,
+  lengthIndicator := 1,
+  instance:= '0000'B,
+  spare:= '0000'B,
+  ePCO := '05'O
+}
+
+template ServingPLMNRateControl t_servingPLMNRateControl :=
+{
+  elementIdentifier := 'C6'O,
+  lengthIndicator := 4,
+  instance:= '0000'B,
+  spare:= '0000'B,
+  uplinkRateLimit := 1000,
+  downlinkRateLimit := 1000,  
+  additionalOctets := omit
+}
+
+template PagingAndServiceInformation t_pagingAndServiceInformation :=
+{
+  elementIdentifier := 'BA'O,
+  lengthIndicator := 2,
+  instance:= '0000'B,
+  spare:= '0000'B,
+  ePS_Bearer_ID_Value := 4,
+  spare2 := '0000'B,
+  pPI := '0'B,
+  spare3 := '0000000'B,
+  pagingPolicyIndicationValue := omit,
+  spare4 := omit,
+  additionalOctets := omit
+}
+
+template CIoT_OptimizationsSupportIndication t_cIoT_OptimizationsSupportIndication :=
+{
+  elementIdentifier := 'C2'O,
+  lengthIndicator := 1,
+  instance:= '0000'B,
+  spare:= '0000'B,
+  sGNIPDN := '0'B,
+  sCNIPDN := '0'B,
+  aWOPDN := '0'B,
+  iHCSI := '0'B,
+  spare2 := '0000'B,
+  additionalOctets := omit
+}
+
+template Mapped_UE_UsageType t_mapped_UE_UsageType :=
+{
+  elementIdentifier := 'C8'O,
+  lengthIndicator := 2,
+  instance:= '0000'B,
+  spare := '0000'B,
+  mapped_UE_UsageType := '0102'O,
+  additionalOctets := omit
+}
+
+template Secondary_RAT_UsageDataReport t_secondary_RAT_UsageDataReport :=
+{ 
+  elementIdentifier := 'C9'O,
+  lengthIndicator := 27,
+  instance := '0000'B,
+  spare := '0000'B,
+  iRPGW := '0'B,
+  iRSGW := '0'B,
+  spare2 := '000000'B,
+  secondaryRATType := 1,
+  eBI := '0000'B,
+  spare3 := '0000'B,
+  startTimestamp := '01020304'O, 
+  endTimestamp := '01020305'O,
+  usageDataDL := '0102030405060708'O,
+  usageDataUL := '0102030405060708'O,
+  additionalOctets := omit
+}
+
+template UP_FunctionSelectionIndicationFlags t_uP_FunctionSelectionIndicationFlags :=
+{
+  elementIdentifier := 'CA'O,
+  lengthIndicator := 1,
+  instance:= '0000'B,
+  spare:= '0000'B,
+  dCNR := '0'B,
+  spare2 := '0000000'B,
+  additionalOctets := omit
+}
+  
+testcase tc_createSessionRequest() runs on ct_GTPv2{
+  var GTPCv2_PDUs v_gtpcv2_pdu := {
+    createSessionRequest := {
+      iMSI := omit,
+      mSISDN := omit,
+      mEI := omit,
+      userLocationInfo := omit,
+      servingNetwork := omit,
+      rAT_Type := valueof(t_ratType),
+      indication := omit,
+      fullyQualifiedTEID := {valueof(t_fullyQualifiedTEID)},
+      accessPointName := valueof(t_accessPointName),
+      selectionMode := omit,
+      pDN_Type := omit,
+      pDN_AddressAllocation := omit,
+      maxAPN_Restriction := omit,
+      ambr := omit,
+      linkedEPS_Bearer_ID := omit,
+      trustedWLANModeIndication := valueof(t_trustedWLANModeIndication),
+      protocolConfigOptions := omit,
+      bearerContextGrouped := {valueof(t_bearerContextGrouped)},
+      traceInformation := omit,
+      recovery := omit,
+      csid := omit,
+      uE_TimeZone := omit,
+      user_CSG_Information := omit,
+      chargingCharacteristics := omit,
+      lDN := omit,
+      signallingPriorityIndication := omit,
+      iP_Addr := omit,
+      portNumber := omit,
+      aPCO := omit,
+      trustedWLANAccessNetworkIdentifier :=  {valueof(t_trustedWLANAccessNetworkIdentifier)},
+      cNOperatorSelectionEntity := valueof(t_cNOperatorSelectionEntity),
+      presenceReportingAreaInformation := {valueof(t_presenceReportingAreaInformation)},
+      overloadControlInformationGrouped :=  {valueof(t_overloadControlInformationGrouped), valueof(t_overloadControlInformationGrouped)},
+      originationTimeStamp := valueof(t_millisecondTimeStamp),
+      maximumWaitTime := valueof(t_integerNumber),
+      wLANLocationTimestamp :=  valueof(t_tWANIdentifierTimestamp),
+      nBIFOMContainer := valueof(t_nBIFOMContainer),
+      remoteUEContextGrouped := valueof(t_remoteUEContextGrouped),
+      nodeIdentifier := {valueof(t_nodeIdentifier)},            
+      extendedProtocolConfigOptions := valueof(t_extendedProtocolConfigOptions),
+      servingPLMNRateControl := valueof(t_servingPLMNRateControl),
+      counter := omit,
+      mapped_UE_UsageType := valueof(t_mapped_UE_UsageType),
+      fullyQualifiedDomainName := omit,
+      secondary_RAT_UsageDataReport := {valueof(t_secondary_RAT_UsageDataReport)},
+      uP_FunctionSelectionIndicationFlags := valueof(t_uP_FunctionSelectionIndicationFlags),
+      privateExtension := omit
+    }
+  }
+  var PDU_GTPCv2 v_pdu_gtpcv2 := valueof(t_pdu_gtpcv2('20'O,v_gtpcv2_pdu));
+  log("Original: ", v_pdu_gtpcv2);
+  var octetstring v_gtp_encoded := enc_PDU_GTPCv2(v_pdu_gtpcv2);
+  log("Encoded value: ", v_gtp_encoded);
+  var PDU_GTPCv2 v_gtp_decoded := dec_PDU_GTPCv2(v_gtp_encoded);
+  log("Decoded: ", v_gtp_decoded);
+  if(not match(v_gtp_decoded,t_m_pdu_gtpcv2('20'O,v_gtpcv2_pdu))) {
+    setverdict(fail);
+  } 
+  setverdict(pass);
+}
+  
+testcase tc_createSessionResponse() runs on ct_GTPv2{
+  var GTPCv2_PDUs v_gtpcv2_pdu := {
+    createSessionResponse := {
+      cause := valueof(t_cause),
+      changeReportingAction := omit,
+      cSG_InformationReportingAction := omit,
+      heNBInformationReporting := omit,
+      fullyQualifiedTEID := omit,
+      pDN_AddressAllocation := omit,
+      aPN_Restriction := omit,
+      ambr := omit,
+      linkedEPS_Bearer_ID := omit,
+      protocolConfigOptions := omit,
+      bearerContextGrouped := omit,
+      recovery := omit,
+      chargingGatewayName := omit,
+      chargingGatewayAddress := omit,
+      csid := omit,
+      lDN := omit,
+      pGW_Back_OffTime := omit,
+      aPCO := omit,
+      trustedWLANIPv4Parameters := valueof(t_IPv4ConfigurationPrameters),
+      indicationFlags := valueof(t_indicationFlags),
+      presenceReportingAreaAction := {valueof(t_presenceReportingAreaAction)},
+      loadControlInformationGrouped :=  {valueof(t_loadControlInformationGrouped), valueof(t_loadControlInformationGrouped), valueof(t_loadControlInformationGrouped)},
+      overloadControlInformationGrouped :=  {valueof(t_overloadControlInformationGrouped), valueof(t_overloadControlInformationGrouped)},
+      nBIFOMContainer := valueof(t_nBIFOMContainer),
+      pDNConnectionChargingID := omit,
+      extendedProtocolConfigOptions := valueof(t_extendedProtocolConfigOptions),
+      privateExtension := omit
+    }
+  }
+  var PDU_GTPCv2 v_pdu_gtpcv2 := valueof(t_pdu_gtpcv2('21'O,v_gtpcv2_pdu));
+  log("Original: ", v_pdu_gtpcv2);  
+  var octetstring v_gtp_encoded := enc_PDU_GTPCv2(v_pdu_gtpcv2);
+  log("Encoded value: ", v_gtp_encoded);  
+  var PDU_GTPCv2 v_gtp_decoded := dec_PDU_GTPCv2(v_gtp_encoded);
+  log("Decoded: ", v_gtp_decoded);
+  if(not match(v_gtp_decoded,t_m_pdu_gtpcv2('21'O,v_gtpcv2_pdu))) {
+    setverdict(fail);
+  } 
+
+  v_gtpcv2_pdu.createSessionResponse.indicationFlags := valueof(t_indicationFlags2);
+  v_pdu_gtpcv2 := valueof(t_pdu_gtpcv2('21'O,v_gtpcv2_pdu));
+  log("Original: ", v_pdu_gtpcv2);  
+  v_gtp_encoded := enc_PDU_GTPCv2(v_pdu_gtpcv2);
+  log("Encoded value: ", v_gtp_encoded);  
+  v_gtp_decoded := dec_PDU_GTPCv2(v_gtp_encoded);
+  log("Decoded: ", v_gtp_decoded);
+  if(not match(v_gtp_decoded,t_m_pdu_gtpcv2('21'O,v_gtpcv2_pdu))) {
+    setverdict(fail);
+  }
+  
+  setverdict(pass);
+}
+  
+testcase tc_createBearerRequest() runs on ct_GTPv2{
+  var GTPCv2_PDUs v_gtpcv2_pdu := {
+    createBearerRequest := {
+      procedureTransactionID := omit,
+      linkedEPS_BearerID := valueof(t_ePS_BearerID),
+      protocolConfigOptions := omit,
+      bearerContextGrouped := {valueof(t_bearerContextGrouped)},
+      csid := omit,
+      changeReportingAction := omit,
+      cSG_InformationReportingAction := omit,
+      heNBInformationReporting := omit,
+      presenceReportingAreaAction := {valueof(t_presenceReportingAreaAction)},
+      indicationFlags := valueof(t_indicationFlags),
+      loadControlInformationGrouped :=  {valueof(t_loadControlInformationGrouped), valueof(t_loadControlInformationGrouped), valueof(t_loadControlInformationGrouped)},
+      overloadControlInformationGrouped :=  {valueof(t_overloadControlInformationGrouped), valueof(t_overloadControlInformationGrouped)},
+      nBIFOMContainer := valueof(t_nBIFOMContainer),
+      privateExtension := omit
+    }
+  }
+  var PDU_GTPCv2 v_pdu_gtpcv2 := valueof(t_pdu_gtpcv2('5F'O,v_gtpcv2_pdu));
+  log("Original: ", v_pdu_gtpcv2);
+  var octetstring v_gtp_encoded := enc_PDU_GTPCv2(v_pdu_gtpcv2);
+  log("Encoded value: ", v_gtp_encoded);
+  var PDU_GTPCv2 v_gtp_decoded := dec_PDU_GTPCv2(v_gtp_encoded);
+  log("Decoded: ", v_gtp_decoded);
+  if(not match(v_gtp_decoded,t_m_pdu_gtpcv2('5F'O,v_gtpcv2_pdu))) {
+    setverdict(fail);
+  } 
+  setverdict(pass);
+}
+  
+testcase tc_createBearerResponse() runs on ct_GTPv2{
+  var GTPCv2_PDUs v_gtpcv2_pdu := {
+    createBearerResponse := {
+      cause := valueof(t_cause),
+      bearerContextGrouped := omit,
+      recovery := omit,
+      csid := omit,
+      protocolConfigOptions := omit,
+      uE_TimeZone := omit,
+      uLI := omit,
+      trustedWLANAccessNetworkIdentifier:=  {valueof(t_trustedWLANAccessNetworkIdentifier)},
+      overloadControlInformationGrouped :=  {valueof(t_overloadControlInformationGrouped), valueof(t_overloadControlInformationGrouped)},
+      presenceReportingAreaInformation := {valueof(t_presenceReportingAreaInformation)},
+      iP_Addr := {valueof(t_IP_Address)},
+      wLANLocationTimestamp := omit, 
+      portNumber := omit, 
+      nBIFOMContainer := valueof(t_nBIFOMContainer),
+      extendedProtocolConfigOptions := omit,
+      privateExtension := omit
+    }
+  }
+  var PDU_GTPCv2 v_pdu_gtpcv2 := valueof(t_pdu_gtpcv2('60'O,v_gtpcv2_pdu));
+  log("Original: ", v_pdu_gtpcv2);
+  var octetstring v_gtp_encoded := enc_PDU_GTPCv2(v_pdu_gtpcv2);
+  log("Encoded value: ", v_gtp_encoded);
+  var PDU_GTPCv2 v_gtp_decoded := dec_PDU_GTPCv2(v_gtp_encoded);
+  log("Decoded: ", v_gtp_decoded);
+  if(not match(v_gtp_decoded,t_m_pdu_gtpcv2('60'O,v_gtpcv2_pdu))) {
+    setverdict(fail);
+  } 
+  setverdict(pass);
+}
+  
+testcase tc_bearerResourceCommand() runs on ct_GTPv2{
+  var GTPCv2_PDUs v_gtpcv2_pdu := {
+    bearerResourceCommand := {
+      epsBearerIdentity := {valueof(t_ePS_BearerID)},
+      procedureTransactionID := valueof(t_procedureTransactionID),
+      flowQoS := omit,
+      tAD := omit,
+      rAT_Type := omit,
+      servingNetwork := omit,
+      userLocationInfo := omit,
+      indicationFlags := omit,
+      fullyQualifiedTEID := omit,
+      protocolConfigOptions := omit,
+      signallingPriorityIndication := omit,
+      overloadControlInformationGrouped :=  {valueof(t_overloadControlInformationGrouped), valueof(t_overloadControlInformationGrouped)},
+      nBIFOMContainer := omit, 
+      extendedProtocolConfigOptions := omit,
+      privateExtension := omit
+    }
+  }
+  var PDU_GTPCv2 v_pdu_gtpcv2 := valueof(t_pdu_gtpcv2('44'O,v_gtpcv2_pdu));
+  log("Original: ", v_pdu_gtpcv2);
+  var octetstring v_gtp_encoded := enc_PDU_GTPCv2(v_pdu_gtpcv2);
+  log("Encoded value: ", v_gtp_encoded);
+  var PDU_GTPCv2 v_gtp_decoded := dec_PDU_GTPCv2(v_gtp_encoded);
+  log("Decoded: ", v_gtp_decoded);
+  if(not match(v_gtp_decoded,t_m_pdu_gtpcv2('44'O,v_gtpcv2_pdu))) {
+    setverdict(fail);
+  } 
+  setverdict(pass);
+}
+  
+testcase tc_bearerResourceFailureIndication() runs on ct_GTPv2{
+  var GTPCv2_PDUs v_gtpcv2_pdu := {
+    bearerResourceFailureIndication := {
+      cause := valueof(t_cause),
+      linkedBearerIdentity := valueof(t_ePS_BearerID),
+      procedureTransactionID := valueof(t_procedureTransactionID),
+      indicationFlags := valueof(t_indicationFlags),
+      overloadControlInformationGrouped :=  {valueof(t_overloadControlInformationGrouped), valueof(t_overloadControlInformationGrouped)},
+      recovery := omit,
+      nBIFOMContainer := omit,
+      privateExtension := omit
+    }
+  }
+  var PDU_GTPCv2 v_pdu_gtpcv2 := valueof(t_pdu_gtpcv2('45'O,v_gtpcv2_pdu));
+  log("Original: ", v_pdu_gtpcv2);
+  var octetstring v_gtp_encoded := enc_PDU_GTPCv2(v_pdu_gtpcv2);
+  log("Encoded value: ", v_gtp_encoded);
+  var PDU_GTPCv2 v_gtp_decoded := dec_PDU_GTPCv2(v_gtp_encoded);
+  log("Decoded: ", v_gtp_decoded);
+  if(not match(v_gtp_decoded,t_m_pdu_gtpcv2('45'O,v_gtpcv2_pdu))) {
+    setverdict(fail);
+  } 
+  setverdict(pass);
+}
+  
+testcase tc_modifyBearerRequest() runs on ct_GTPv2{
+  var GTPCv2_PDUs v_gtpcv2_pdu := {
+    modifyBearerRequest := {
+      mEI := omit,
+      userLocationInfo := omit,
+      servingNetwork := omit,
+      rAT_Type := omit,
+      indicationFlags := omit,
+      fullyQualifiedTEID := omit,
+      ambr := omit,
+      delayDownlinkPacketNotificationReq := omit,
+      bearerContextGrouped := omit,
+      recovery := omit,
+      uE_TimeZone := omit,
+      csid := omit,
+      user_CSG_Information := omit,
+      iP_Addr := omit,
+      portNumber := omit,
+      lDN := omit,
+      cNOperatorSelectionEntity:= valueof(t_cNOperatorSelectionEntity),
+      presenceReportingAreaInformation := {valueof(t_presenceReportingAreaInformation)},
+      overloadControlInformationGrouped :=  {valueof(t_overloadControlInformationGrouped), valueof(t_overloadControlInformationGrouped)},
+      servingPLMNRateControl := omit,
+      counter := omit,
+      iMSI := omit, 
+      trustedWLANAccessNetworkIdentifier := omit, 
+      tWANIdentifierTimestamp := omit, 
+      secondary_RAT_UsageDataReport := omit,
+      privateExtension := omit
+    }
+  }
+  var PDU_GTPCv2 v_pdu_gtpcv2 := valueof(t_pdu_gtpcv2('22'O,v_gtpcv2_pdu));
+  log("Original: ", v_pdu_gtpcv2);
+  var octetstring v_gtp_encoded := enc_PDU_GTPCv2(v_pdu_gtpcv2);
+  log("Encoded value: ", v_gtp_encoded);
+  var PDU_GTPCv2 v_gtp_decoded := dec_PDU_GTPCv2(v_gtp_encoded);
+  log("Decoded: ", v_gtp_decoded);
+  if(not match(v_gtp_decoded,t_m_pdu_gtpcv2('22'O,v_gtpcv2_pdu))) {
+    setverdict(fail);
+  } 
+  setverdict(pass);
+}
+  
+testcase tc_modifyBearerResponse() runs on ct_GTPv2{
+  var GTPCv2_PDUs v_gtpcv2_pdu := {
+    modifyBearerResponse := {
+      cause := valueof(t_cause),
+      mSISDN := omit,
+      linkedEPS_Bearer_ID := omit,
+      aPN_Restriction := omit,
+      protocolConfigOptions := omit,
+      bearerContextGrouped := omit,
+      changeReportingAction := omit,
+      cSG_InformationReportingAction := omit,
+      heNBInformationReporting := omit,
+      chargingGatewayName := omit,
+      chargingGatewayAddress := omit,
+      csid := omit,
+      recovery := omit,
+      lDN := omit,
+      indicationFlags := omit,
+      presenceReportingAreaAction := {valueof(t_presenceReportingAreaAction)},
+      loadControlInformationGrouped :=  {valueof(t_loadControlInformationGrouped), valueof(t_loadControlInformationGrouped), valueof(t_loadControlInformationGrouped)},
+      overloadControlInformationGrouped :=  {valueof(t_overloadControlInformationGrouped), valueof(t_overloadControlInformationGrouped)},
+      pDNConnectionChargingID := omit,
+      privateExtension := omit
+    }
+  }
+  var PDU_GTPCv2 v_pdu_gtpcv2 := valueof(t_pdu_gtpcv2('23'O,v_gtpcv2_pdu));
+  log("Original: ", v_pdu_gtpcv2);
+  var octetstring v_gtp_encoded := enc_PDU_GTPCv2(v_pdu_gtpcv2);
+  log("Encoded value: ", v_gtp_encoded);
+  var PDU_GTPCv2 v_gtp_decoded := dec_PDU_GTPCv2(v_gtp_encoded);
+  log("Decoded: ", v_gtp_decoded);
+  if(not match(v_gtp_decoded,t_m_pdu_gtpcv2('23'O,v_gtpcv2_pdu))) {
+    setverdict(fail);
+  } 
+  setverdict(pass);
+}
+  
+testcase tc_deleteSessionRequest() runs on ct_GTPv2{
+  var GTPCv2_PDUs v_gtpcv2_pdu := {
+    deleteSessionRequest := {
+      cause := omit,
+      linkedEPS_Bearer_ID := omit,
+      uLI := omit,
+      indicationFlags := omit,
+      protocolConfigOptions := omit,
+      originatingNode := omit,
+      fullyQualifiedTEID := omit,
+      uE_TimeZone := omit,
+      uLITimestamp := omit,
+      rANNASReleaseCause := valueof(t_rAN_NASCause),
+      trustedWLANAccessNetworkIdentifier:=  {valueof(t_trustedWLANAccessNetworkIdentifier)},
+      tWANIdentifierTimestamp :=  {valueof(t_tWANIdentifierTimestamp)},
+      overloadControlInformationGrouped :=  {valueof(t_overloadControlInformationGrouped), valueof(t_overloadControlInformationGrouped)},
+      uELocalIP_Addr := omit,
+      portNumber := omit,
+      extendedProtocolConfigOptions := omit,
+      secondary_RAT_UsageDataReport := omit,
+      privateExtension := omit
+    }
+  }
+  var PDU_GTPCv2 v_pdu_gtpcv2 := valueof(t_pdu_gtpcv2('24'O,v_gtpcv2_pdu));
+  log("Original: ", v_pdu_gtpcv2);
+  var octetstring v_gtp_encoded := enc_PDU_GTPCv2(v_pdu_gtpcv2);
+  log("Encoded value: ", v_gtp_encoded);
+  var PDU_GTPCv2 v_gtp_decoded := dec_PDU_GTPCv2(v_gtp_encoded);
+  log("Decoded: ", v_gtp_decoded);
+  if(not match(v_gtp_decoded,t_m_pdu_gtpcv2('24'O,v_gtpcv2_pdu))) {
+    setverdict(fail);
+  } 
+  setverdict(pass);
+}
+  
+testcase tc_deleteBearerRequest() runs on ct_GTPv2{
+  var GTPCv2_PDUs v_gtpcv2_pdu := {
+    deleteBearerRequest := {
+      epsBearerIdentity := omit,
+      bearerContextGrouped := omit,
+      procedureTransactionID := omit,
+      protocolConfigOptions := omit,
+      csid := omit,  
+      cause := omit,
+      indicationFlags := valueof(t_indicationFlags),
+      loadControlInformationGrouped :=  {valueof(t_loadControlInformationGrouped), valueof(t_loadControlInformationGrouped), valueof(t_loadControlInformationGrouped)},
+      overloadControlInformationGrouped :=  {valueof(t_overloadControlInformationGrouped),valueof(t_overloadControlInformationGrouped)},
+      nBIFOMContainer := valueof(t_nBIFOMContainer),
+      extendedProtocolConfigOptions := valueof(t_extendedProtocolConfigOptions),
+      privateExtension := omit
+    }
+  }
+  var PDU_GTPCv2 v_pdu_gtpcv2 := valueof(t_pdu_gtpcv2('63'O,v_gtpcv2_pdu));
+  log("Original: ", v_pdu_gtpcv2);
+  var octetstring v_gtp_encoded := enc_PDU_GTPCv2(v_pdu_gtpcv2);
+  log("Encoded value: ", v_gtp_encoded);
+  var PDU_GTPCv2 v_gtp_decoded := dec_PDU_GTPCv2(v_gtp_encoded);
+  log("Decoded: ", v_gtp_decoded);
+  if(not match(v_gtp_decoded,t_m_pdu_gtpcv2('63'O,v_gtpcv2_pdu))) {
+    setverdict(fail);
+  } 
+  setverdict(pass);
+}
+  
+testcase tc_deleteSessionResponse() runs on ct_GTPv2{
+  var GTPCv2_PDUs v_gtpcv2_pdu := {
+    deleteSessionResponse := {
+      cause := valueof(t_cause),
+      recovery := omit,
+      protocolConfigOptions := omit,
+      indicationFlags := valueof(t_indicationFlags),
+      loadControlInformationGrouped :=  {valueof(t_loadControlInformationGrouped), valueof(t_loadControlInformationGrouped), valueof(t_loadControlInformationGrouped)},
+      overloadControlInformationGrouped :=  {valueof(t_overloadControlInformationGrouped), valueof(t_overloadControlInformationGrouped)},
+      extendedProtocolConfigOptions := valueof(t_extendedProtocolConfigOptions),
+      privateExtension := omit
+    }
+  }
+  var PDU_GTPCv2 v_pdu_gtpcv2 := valueof(t_pdu_gtpcv2('25'O,v_gtpcv2_pdu));
+  log("Original: ", v_pdu_gtpcv2);
+  var octetstring v_gtp_encoded := enc_PDU_GTPCv2(v_pdu_gtpcv2);
+  log("Encoded value: ", v_gtp_encoded);
+  var PDU_GTPCv2 v_gtp_decoded := dec_PDU_GTPCv2(v_gtp_encoded);
+  log("Decoded: ", v_gtp_decoded);
+  if(not match(v_gtp_decoded,t_m_pdu_gtpcv2('25'O,v_gtpcv2_pdu))) {
+    setverdict(fail);
+  } 
+  setverdict(pass);
+}
+  
+testcase tc_deleteBearerResponse() runs on ct_GTPv2{
+  var GTPCv2_PDUs v_gtpcv2_pdu := {
+    deleteBearerResponse := {
+      cause := valueof(t_cause),
+      linkedBearerIdentity := omit,
+      bearerContextGrouped := omit,
+      recovery := omit,
+      csid := omit,
+      protocolConfigOptions := omit,
+      uE_TimeZone := omit,
+      uLI := omit,
+      uLITimestamp := omit,
+      trustedWLANAccessNetworkIdentifier :=  valueof(t_trustedWLANAccessNetworkIdentifier),
+      tWANIdentifierTimestamp :=  valueof(t_tWANIdentifierTimestamp),
+      overloadControlInformationGrouped :=  {valueof(t_overloadControlInformationGrouped), valueof(t_overloadControlInformationGrouped)},
+      iP_Addr := {valueof(t_IP_Address)},
+      portNumber := omit,
+      nBIFOMContainer:= valueof(t_nBIFOMContainer),
+      secondary_RAT_UsageDataReport := omit,
+      privateExtension := omit
+    }
+  }
+  var PDU_GTPCv2 v_pdu_gtpcv2 := valueof(t_pdu_gtpcv2('64'O,v_gtpcv2_pdu));
+  log("Original: ", v_pdu_gtpcv2);
+  var octetstring v_gtp_encoded := enc_PDU_GTPCv2(v_pdu_gtpcv2);
+  log("Encoded value: ", v_gtp_encoded);
+  var PDU_GTPCv2 v_gtp_decoded := dec_PDU_GTPCv2(v_gtp_encoded);
+  log("Decoded: ", v_gtp_decoded);
+  if(not match(v_gtp_decoded,t_m_pdu_gtpcv2('64'O,v_gtpcv2_pdu))) {
+    setverdict(fail);
+  } 
+  setverdict(pass);
+}
+  
+testcase tc_downlinkDataNotification() runs on ct_GTPv2{
+  var GTPCv2_PDUs v_gtpcv2_pdu := {
+    downlinkDataNotification := {
+      cause := omit,
+      epsBearerIdentity := omit,
+      aRP := omit,
+      iMSI := omit,
+      fullyQualifiedTEID := omit, 
+      indicationFlags := valueof(t_indicationFlags),
+      loadControlInformationGrouped :=  valueof(t_loadControlInformationGrouped),
+      overloadControlInformationGrouped :=  valueof(t_overloadControlInformationGrouped),
+      pagingAndServiceInformation :=  valueof(t_pagingAndServiceInformation),
+      privateExtension := omit
+    }
+  }
+  var PDU_GTPCv2 v_pdu_gtpcv2 := valueof(t_pdu_gtpcv2('B0'O,v_gtpcv2_pdu));
+  log("Original: ", v_pdu_gtpcv2);
+  var octetstring v_gtp_encoded := enc_PDU_GTPCv2(v_pdu_gtpcv2);
+  log("Encoded value: ", v_gtp_encoded);
+  var PDU_GTPCv2 v_gtp_decoded := dec_PDU_GTPCv2(v_gtp_encoded);
+  log("Decoded: ", v_gtp_decoded);
+  if(not match(v_gtp_decoded,t_m_pdu_gtpcv2('B0'O,v_gtpcv2_pdu))) {
+    setverdict(fail);
+  } 
+  setverdict(pass);
+}
+  
+testcase tc_modifyBearerCommand() runs on ct_GTPv2{
+  var GTPCv2_PDUs v_gtpcv2_pdu := {
+    modifyBearerCommand := {
+      ambr := valueof(t_ambr),
+      bearerContextGrouped := valueof(t_bearerContextGrouped),
+      overloadControlInformationGrouped := { valueof(t_overloadControlInformationGrouped),  valueof(t_overloadControlInformationGrouped)},
+      fullyQualifiedTEID := omit,
+      privateExtension := omit
+    }
+  }
+  var PDU_GTPCv2 v_pdu_gtpcv2 := valueof(t_pdu_gtpcv2('40'O,v_gtpcv2_pdu));
+  log("Original: ", v_pdu_gtpcv2);
+  var octetstring v_gtp_encoded := enc_PDU_GTPCv2(v_pdu_gtpcv2);
+  log("Encoded value: ", v_gtp_encoded);
+  var PDU_GTPCv2 v_gtp_decoded := dec_PDU_GTPCv2(v_gtp_encoded);
+  log("Decoded: ", v_gtp_decoded);
+  if(not match(v_gtp_decoded,t_m_pdu_gtpcv2('40'O,v_gtpcv2_pdu))) {
+    setverdict(fail);
+  } 
+  setverdict(pass);
+}
+  
+testcase tc_modifyBearerFailureIndication() runs on ct_GTPv2{
+  var GTPCv2_PDUs v_gtpcv2_pdu := {
+    modifyBearerFailureIndication := {
+      cause := valueof(t_cause),
+      recovery := omit,
+      indicationFlags := valueof(t_indicationFlags),
+      overloadControlInformationGrouped := { valueof(t_overloadControlInformationGrouped),  valueof(t_overloadControlInformationGrouped)},
+      privateExtension := omit
+    }
+  }
+  var PDU_GTPCv2 v_pdu_gtpcv2 := valueof(t_pdu_gtpcv2('41'O,v_gtpcv2_pdu));
+  log("Original: ", v_pdu_gtpcv2);
+  var octetstring v_gtp_encoded := enc_PDU_GTPCv2(v_pdu_gtpcv2);
+  log("Encoded value: ", v_gtp_encoded);
+  var PDU_GTPCv2 v_gtp_decoded := dec_PDU_GTPCv2(v_gtp_encoded);
+  log("Decoded: ", v_gtp_decoded);
+  if(not match(v_gtp_decoded,t_m_pdu_gtpcv2('41'O,v_gtpcv2_pdu))) {
+    setverdict(fail);
+  } 
+  setverdict(pass);
+}
+
+testcase tc_deleteBearerFailureIndication2() runs on ct_GTPv2{
+  var GTPCv2_PDUs v_gtpcv2_pdu := {
+    deleteBearerFailureIndication := {
+      cause := valueof(t_cause),
+      bearerContextGrouped := {valueof(t_m_bearerContextGrouped)}, 
+      recovery := omit,
+      indicationFlags := valueof(t_indicationFlags),
+      overloadControlInformationGrouped := { valueof(t_overloadControlInformationGrouped),  valueof(t_overloadControlInformationGrouped)},
+      privateExtension := omit
+    }
+  }
+  var PDU_GTPCv2 v_pdu_gtpcv2 := valueof(t_pdu_gtpcv2('43'O,v_gtpcv2_pdu));
+  log("Original: ", v_pdu_gtpcv2);
+  var octetstring v_gtp_encoded := enc_PDU_GTPCv2(v_pdu_gtpcv2);
+  log("Encoded value: ", v_gtp_encoded);
+  var PDU_GTPCv2 v_gtp_decoded := dec_PDU_GTPCv2(v_gtp_encoded);
+  log("Decoded: ", v_gtp_decoded);
+  if(not match(v_gtp_decoded,t_m_pdu_gtpcv2('43'O,v_gtpcv2_pdu))) {
+    setverdict(fail);
+  } 
+  setverdict(pass);
+}
+
+testcase tc_updateBearerRequest() runs on ct_GTPv2{
+  var GTPCv2_PDUs v_gtpcv2_pdu := {
+    updateBearerRequest := {
+      bearerContextGrouped := {valueof(t_bearerContextGrouped)},
+      procedureTransactionID := omit,
+      protocolConfigOptions := omit,
+      apn_ambr := valueof(t_ambr),
+      changeReportingAction := omit,
+      cSG_InformationReportingAction := omit,
+      indicationFlags := omit,
+      heNBInformationReporting := omit,
+      csid := omit,
+      presenceReportingAreaAction := {valueof(t_presenceReportingAreaAction)},
+      loadControlInformationGrouped := { valueof(t_loadControlInformationGrouped),  valueof(t_loadControlInformationGrouped),valueof(t_loadControlInformationGrouped)},
+      overloadControlInformationGrouped := { valueof(t_overloadControlInformationGrouped),  valueof(t_overloadControlInformationGrouped)},
+      nBIFOMContainer:= valueof(t_nBIFOMContainer),
+      privateExtension := omit
+    }
+  }
+  var PDU_GTPCv2 v_pdu_gtpcv2 := valueof(t_pdu_gtpcv2('61'O,v_gtpcv2_pdu));
+  log("Original: ", v_pdu_gtpcv2);
+  var octetstring v_gtp_encoded := enc_PDU_GTPCv2(v_pdu_gtpcv2);
+  log("Encoded value: ", v_gtp_encoded);
+  var PDU_GTPCv2 v_gtp_decoded := dec_PDU_GTPCv2(v_gtp_encoded);
+  log("Decoded: ", v_gtp_decoded);
+  if(not match(v_gtp_decoded,t_m_pdu_gtpcv2('61'O,v_gtpcv2_pdu))) {
+    setverdict(fail);
+  } 
+  setverdict(pass);
+}
+  
+testcase tc_updateBearerResponse() runs on ct_GTPv2{
+  var GTPCv2_PDUs v_gtpcv2_pdu := {
+    updateBearerResponse := {
+      cause := valueof(t_cause),
+      bearerContextGrouped := {valueof(t_bearerContextGrouped)},
+      protocolConfigOptions := omit,
+      recovery := omit,
+      csid := omit,
+      indicationFlags := omit,  
+      uE_TimeZone := omit,
+      uLI := omit,
+      trustedWLANAccessNetworkIdentifier :=  valueof(t_trustedWLANAccessNetworkIdentifier),
+      overloadControlInformationGrouped := { valueof(t_overloadControlInformationGrouped),  valueof(t_overloadControlInformationGrouped)},
+      presenceReportingAreaInformation := {valueof(t_presenceReportingAreaInformation)},
+      iP_Addr := {valueof(t_IP_Address)},
+      tWANIdentifierTimestamp := valueof(t_tWANIdentifierTimestamp),
+      portNumber := omit,
+      nBIFOMContainer := valueof(t_nBIFOMContainer),
+      extendedProtocolConfigOptions := valueof(t_extendedProtocolConfigOptions),
+      privateExtension := omit
+    }
+  }
+  var PDU_GTPCv2 v_pdu_gtpcv2 := valueof(t_pdu_gtpcv2('62'O,v_gtpcv2_pdu));
+  log("Original: ", v_pdu_gtpcv2);
+  var octetstring v_gtp_encoded := enc_PDU_GTPCv2(v_pdu_gtpcv2);
+  log("Encoded value: ", v_gtp_encoded);
+  var PDU_GTPCv2 v_gtp_decoded := dec_PDU_GTPCv2(v_gtp_encoded);
+  log("Decoded: ", v_gtp_decoded);
+  if(not match(v_gtp_decoded,t_m_pdu_gtpcv2('62'O,v_gtpcv2_pdu))) {
+    setverdict(fail);
+  } 
+  setverdict(pass);
+}
+  
+testcase tc_deleteBearerCommand() runs on ct_GTPv2{
+  var GTPCv2_PDUs v_gtpcv2_pdu := {
+    deleteBearerCommand := {
+      bearerContextGrouped := {valueof(t_bearerContextGrouped)}, 
+      uli := omit,
+      uli_timestamp := omit,
+      ue_timezone := omit,
+      overloadControlInformationGrouped := { valueof(t_overloadControlInformationGrouped),  valueof(t_overloadControlInformationGrouped)},
+      fullyQualifiedTEID := omit,
+      secondary_RAT_UsageDataReport := omit,
+      privateExtension := omit
+    }
+  }
+  var PDU_GTPCv2 v_pdu_gtpcv2 := valueof(t_pdu_gtpcv2('42'O,v_gtpcv2_pdu));
+  log("Original: ", v_pdu_gtpcv2);
+  var octetstring v_gtp_encoded := enc_PDU_GTPCv2(v_pdu_gtpcv2);
+  log("Encoded value: ", v_gtp_encoded);
+  var PDU_GTPCv2 v_gtp_decoded := dec_PDU_GTPCv2(v_gtp_encoded);
+  log("Decoded: ", v_gtp_decoded);
+  if(not match(v_gtp_decoded,t_m_pdu_gtpcv2('42'O,v_gtpcv2_pdu))) {
+    setverdict(fail);
+  } 
+  setverdict(pass);
+}
+  
+testcase tc_deleteBearerFailureIndication() runs on ct_GTPv2{
+  var GTPCv2_PDUs v_gtpcv2_pdu := {
+    deleteBearerFailureIndication := {
+      cause := valueof(t_cause),
+      bearerContextGrouped := {valueof(t_bearerContextGrouped)}, 
+      recovery := omit,
+      indicationFlags := valueof(t_indicationFlags),
+      overloadControlInformationGrouped := { valueof(t_overloadControlInformationGrouped),  valueof(t_overloadControlInformationGrouped)},
+      privateExtension := omit
+    }
+  }
+  var PDU_GTPCv2 v_pdu_gtpcv2 := valueof(t_pdu_gtpcv2('43'O,v_gtpcv2_pdu));
+  log("Original: ", v_pdu_gtpcv2);
+  var octetstring v_gtp_encoded := enc_PDU_GTPCv2(v_pdu_gtpcv2);
+  log("Encoded value: ", v_gtp_encoded);
+  var PDU_GTPCv2 v_gtp_decoded := dec_PDU_GTPCv2(v_gtp_encoded);
+  log("Decoded: ", v_gtp_decoded);
+  if(not match(v_gtp_decoded,t_m_pdu_gtpcv2('43'O,v_gtpcv2_pdu))) {
+    setverdict(fail);
+  } 
+  setverdict(pass);
+}
+  
+testcase tc_releaseAccessBearersRequest() runs on ct_GTPv2{
+  var GTPCv2_PDUs v_gtpcv2_pdu := {
+    releaseAccessBearersRequest := {
+      listOfRABs := omit,
+      originatingNode := omit,
+      indicationFlags := valueof(t_indicationFlags),
+      secondary_RAT_UsageDataReport := omit,
+      privateExtension := omit
+    }
+  }
+  var PDU_GTPCv2 v_pdu_gtpcv2 := valueof(t_pdu_gtpcv2('AA'O,v_gtpcv2_pdu));
+  log("Original: ", v_pdu_gtpcv2);
+  var octetstring v_gtp_encoded := enc_PDU_GTPCv2(v_pdu_gtpcv2);
+  log("Encoded value: ", v_gtp_encoded);
+  var PDU_GTPCv2 v_gtp_decoded := dec_PDU_GTPCv2(v_gtp_encoded);
+  log("Decoded: ", v_gtp_decoded);
+  if(not match(v_gtp_decoded,t_m_pdu_gtpcv2('AA'O,v_gtpcv2_pdu))) {
+    setverdict(fail);
+  } 
+  setverdict(pass);
+}
+  
+testcase tc_releaseAccessBearersResponse() runs on ct_GTPv2{
+  var GTPCv2_PDUs v_gtpcv2_pdu := {
+    releaseAccessBearersResponse := {
+      cause := valueof(t_cause),
+      recovery := omit,
+      indicationFlags := valueof(t_indicationFlags),
+      loadControlInformationGrouped := valueof(t_loadControlInformationGrouped),
+      overloadControlInformationGrouped := valueof(t_overloadControlInformationGrouped),
+      privateExtension := omit
+    }
+  }
+  var PDU_GTPCv2 v_pdu_gtpcv2 := valueof(t_pdu_gtpcv2('AB'O,v_gtpcv2_pdu));
+  log("Original: ", v_pdu_gtpcv2);
+  var octetstring v_gtp_encoded := enc_PDU_GTPCv2(v_pdu_gtpcv2);
+  log("Encoded value: ", v_gtp_encoded);
+  var PDU_GTPCv2 v_gtp_decoded := dec_PDU_GTPCv2(v_gtp_encoded);
+  log("Decoded: ", v_gtp_decoded);
+  if(not match(v_gtp_decoded,t_m_pdu_gtpcv2('AB'O,v_gtpcv2_pdu))) {
+    setverdict(fail);
+  } 
+  setverdict(pass);
+}
+  
+testcase tc_stopPagingIndication() runs on ct_GTPv2{
+  var GTPCv2_PDUs v_gtpcv2_pdu := {
+    stopPagingIndication := {
+      iMSI := valueof(t_iMSI),            
+      privateExtension := omit
+    }
+  }
+  var PDU_GTPCv2 v_pdu_gtpcv2 := valueof(t_pdu_gtpcv2('49'O,v_gtpcv2_pdu));
+  log("Original: ", v_pdu_gtpcv2);
+  var octetstring v_gtp_encoded := enc_PDU_GTPCv2(v_pdu_gtpcv2);
+  log("Encoded value: ", v_gtp_encoded);
+  var PDU_GTPCv2 v_gtp_decoded := dec_PDU_GTPCv2(v_gtp_encoded);
+  log("Decoded: ", v_gtp_decoded);
+  if(not match(v_gtp_decoded,t_m_pdu_gtpcv2('49'O,v_gtpcv2_pdu))) {
+    setverdict(fail);
+  } 
+  setverdict(pass);
+}
+  
+testcase tc_modifyAccessBearersResponse() runs on ct_GTPv2{
+  var GTPCv2_PDUs v_gtpcv2_pdu := {
+    modifyAccessBearersResponse := {
+      cause := valueof(t_cause),
+      bearerContextGrouped := omit,
+      recovery := omit,
+      indicationFlags := valueof(t_indicationFlags),
+      loadControlInformationGrouped := valueof(t_loadControlInformationGrouped),
+      overloadControlInformationGrouped := valueof(t_overloadControlInformationGrouped),
+      privateExtension := omit
+    }
+  }
+
+  var PDU_GTPCv2 v_pdu_gtpcv2 := valueof(t_pdu_gtpcv2('D4'O,v_gtpcv2_pdu));
+  log("Original: ", v_pdu_gtpcv2);
+  var octetstring v_gtp_encoded := enc_PDU_GTPCv2(v_pdu_gtpcv2);
+  log("Encoded value: ", v_gtp_encoded);
+  var PDU_GTPCv2 v_gtp_decoded := dec_PDU_GTPCv2(v_gtp_encoded);
+  log("Decoded: ", v_gtp_decoded);
+  if(not match(v_gtp_decoded,t_m_pdu_gtpcv2('D4'O,v_gtpcv2_pdu))) {
+    setverdict(fail);
+  } 
+  setverdict(pass);
+}
+  
+testcase tc_forwardRelocationResponse() runs on ct_GTPv2{
+  var GTPCv2_PDUs v_gtpcv2_pdu:={
+    forwardRelocationResponse:= {
+      cause := valueof(t_cause),
+      fullyQualifiedTEID := omit,
+      indication := omit,
+      bearerContextGrouped := omit,
+      fullyQualifiedCause := omit,
+      transparentContainer := omit,
+      lDN := omit,
+      nodeName := omit,
+      nodeNumber := {valueof(t_nodeNumber)},
+      nodeIdentifier := {valueof(t_nodeIdentifier),valueof(t_nodeIdentifier)},
+      privateExtension := omit
+    }
+  }
+  var PDU_GTPCv2 v_pdu_gtpcv2 := valueof(t_pdu_gtpcv2('86'O,v_gtpcv2_pdu));
+  log("Original: ", v_pdu_gtpcv2);
+  var octetstring v_gtp_encoded := enc_PDU_GTPCv2(v_pdu_gtpcv2);
+  log("Encoded value: ", v_gtp_encoded);
+  var PDU_GTPCv2 v_gtp_decoded := dec_PDU_GTPCv2(v_gtp_encoded);
+  log("Decoded: ", v_gtp_decoded);
+  if(not match(v_gtp_decoded,t_m_pdu_gtpcv2('86'O,v_gtpcv2_pdu))) {
+    setverdict(fail);
+  } 
+  setverdict(pass);
+}
+  
+testcase tc_contextRequest() runs on ct_GTPv2{
+  var GTPCv2_PDUs v_gtpcv2_pdu:={
+    contextRequest:= {
+      iMSI := omit,
+      gUTI := omit,
+      uLI := omit,
+      pTMSI := omit,
+      pTMSI_Signature := omit,
+      complete_TAU_RequestMessage := omit,
+      address_and_TEID_for_ControlPlane := omit,
+      portNumber := omit,
+      rAT_Type := omit, 
+      indication := omit,
+      hop_Counter := omit,
+      target_PLMN_ID := omit,
+      lDN := omit,
+      nodeName := omit,
+      sGSNNumber := valueof(t_nodeNumber),
+      nodeIdentifier := {valueof(t_nodeIdentifier),valueof(t_nodeIdentifier)},
+      cIoT_OptimizationsSupportIndication := valueof(t_cIoT_OptimizationsSupportIndication),
+      privateExtension := omit
+    }
+  }
+  var PDU_GTPCv2 v_pdu_gtpcv2 := valueof(t_pdu_gtpcv2('82'O,v_gtpcv2_pdu));
+  log("Original: ", v_pdu_gtpcv2);
+  var octetstring v_gtp_encoded := enc_PDU_GTPCv2(v_pdu_gtpcv2);
+  log("Encoded value: ", v_gtp_encoded);
+  var PDU_GTPCv2 v_gtp_decoded := dec_PDU_GTPCv2(v_gtp_encoded);
+  log("Decoded: ", v_gtp_decoded);
+  if(not match(v_gtp_decoded,t_m_pdu_gtpcv2('82'O,v_gtpcv2_pdu))) {
+    setverdict(fail);
+  } 
+  setverdict(pass);
+}
+
+testcase tc_changeNotificationRequest() runs on ct_GTPv2{
+  var GTPCv2_PDUs v_gtpcv2_pdu:={
+    changeNotificationRequest:= {
+      iMSI := omit,            
+      mEI := omit,
+      indication := omit,
+      rAT_Type := valueof(t_ratType),
+      uLI := omit,
+      user_CSG_Information := omit,
+      gTPC_IP_Address := omit,
+      linkedBearerIdentity := omit,
+      presenceReportingAreaInformation := {valueof(t_presenceReportingAreaInformation)},
+      counter := omit,
+      secondary_RAT_UsageDataReport := omit,
+      privateExtension := omit
+    }
+  }
+  var PDU_GTPCv2 v_pdu_gtpcv2 := valueof(t_pdu_gtpcv2('26'O,v_gtpcv2_pdu));
+  log("Original: ", v_pdu_gtpcv2);
+  var octetstring v_gtp_encoded := enc_PDU_GTPCv2(v_pdu_gtpcv2);
+  log("Encoded value: ", v_gtp_encoded);
+  var PDU_GTPCv2 v_gtp_decoded := dec_PDU_GTPCv2(v_gtp_encoded);
+  log("Decoded: ", v_gtp_decoded);
+  if(not match(v_gtp_decoded,t_m_pdu_gtpcv2('26'O,v_gtpcv2_pdu))) {
+    setverdict(fail);
+  } 
+  setverdict(pass);
+}
+
+testcase tc_changeNotificationResponse() runs on ct_GTPv2{
+  var GTPCv2_PDUs v_gtpcv2_pdu:={
+    changeNotificationResponse:= {
+      iMSI := omit,            
+      mEI := omit,
+      cause := valueof(t_cause),
+      changeReportingAction := omit,
+      cSG_InformationReportingAction := omit,
+      presenceReportingAreaAction := {valueof(t_presenceReportingAreaAction)},
+      privateExtension := omit
+    }
+  }
+  var PDU_GTPCv2 v_pdu_gtpcv2 := valueof(t_pdu_gtpcv2('27'O,v_gtpcv2_pdu));
+  log("Original: ", v_pdu_gtpcv2);
+  var octetstring v_gtp_encoded := enc_PDU_GTPCv2(v_pdu_gtpcv2);
+  log("Encoded value: ", v_gtp_encoded);
+  var PDU_GTPCv2 v_gtp_decoded := dec_PDU_GTPCv2(v_gtp_encoded);
+  log("Decoded: ", v_gtp_decoded);
+  if(not match(v_gtp_decoded,t_m_pdu_gtpcv2('27'O,v_gtpcv2_pdu))) {
+    setverdict(fail);
+  } 
+  setverdict(pass);
+  v_gtpcv2_pdu.changeNotificationResponse.presenceReportingAreaAction := {valueof(t_presenceReportingAreaAction2) } 
+  v_pdu_gtpcv2 := valueof(t_pdu_gtpcv2('27'O,v_gtpcv2_pdu));
+  v_gtp_encoded := enc_PDU_GTPCv2(v_pdu_gtpcv2);
+  log("Encoded value: ", v_gtp_encoded);
+  v_gtp_decoded := dec_PDU_GTPCv2(v_gtp_encoded);
+  log("Decoded: ", v_gtp_decoded);
+  if(not match(v_gtp_decoded,t_m_pdu_gtpcv2('27'O,v_gtpcv2_pdu))) {
+    setverdict(fail);
+  } 
+  setverdict(pass);
+  
+}
+  
+testcase tc_contextResponse() runs on ct_GTPv2{
+  var GTPCv2_PDUs v_gtpcv2_pdu:={
+    contextResponse:= {
+      cause := valueof(t_cause),
+      iMSI := omit,
+      mM_Context := omit,
+      pDN_Connection := valueof(t_pDN_ConnectionGrouped_List),
+      fullyQualifiedTEID := omit,
+      nodeName := omit,
+      indication := omit,
+      traceInformation := omit,
+      iP_Addr := omit,
+      rFSP_Index := omit,               
+      uE_TimeZone := omit,
+      lDN := omit,
+      mDT_Configuration := valueof(t_mDT_Configuration),
+      user_CSG_Information := omit,
+      monitoringEventInformation := omit,
+      uEUsageType := omit,
+      mME_US_SCEF_PDN_Connection := valueof(t_sCEF_PDN_ConnectionGrouped_List),
+      rAT_Type := omit,
+      servingPLMNRateControl := omit,
+      counter := omit,
+      privateExtension := omit
+    }
+  }
+  var PDU_GTPCv2 v_pdu_gtpcv2 := valueof(t_pdu_gtpcv2('83'O,v_gtpcv2_pdu));
+  log("Original: ", v_pdu_gtpcv2);
+  var octetstring v_gtp_encoded := enc_PDU_GTPCv2(v_pdu_gtpcv2);
+  log("Encoded value: ", v_gtp_encoded);
+  var PDU_GTPCv2 v_gtp_decoded := dec_PDU_GTPCv2(v_gtp_encoded);
+  log("Decoded: ", v_gtp_decoded);
+  if(not match(v_gtp_decoded,t_m_pdu_gtpcv2('83'O,v_gtpcv2_pdu))) {
+    setverdict(fail);
+  } 
+  setverdict(pass);
+}
+  
+testcase tc_remoteUEReportNotification() runs on ct_GTPv2{
+  var GTPCv2_PDUs v_gtpcv2_pdu := {
+    remoteUEReportNotification := {
+      remoteUEContextGrouped := valueof(t_remoteUEContextGrouped),
+      privateExtension := omit
+    }
+  }
+  var PDU_GTPCv2 v_pdu_gtpcv2 := valueof(t_pdu_gtpcv2('28'O,v_gtpcv2_pdu));
+  log("Original: ", v_pdu_gtpcv2);
+  var octetstring v_gtp_encoded := enc_PDU_GTPCv2(v_pdu_gtpcv2);
+  log("Encoded value: ", v_gtp_encoded);
+  var PDU_GTPCv2 v_gtp_decoded := dec_PDU_GTPCv2(v_gtp_encoded);
+  log("Decoded: ", v_gtp_decoded);
+  if(not match(v_gtp_decoded,t_m_pdu_gtpcv2('28'O,v_gtpcv2_pdu))) {
+    setverdict(fail);
+  } 
+  setverdict(pass);
+}
+  
+testcase tc_remoteUEReportAcknowledge() runs on ct_GTPv2{
+  var GTPCv2_PDUs v_gtpcv2_pdu := {
+    remoteUEReportAcknowledge := {
+      cause := valueof(t_cause),
+      privateExtension := omit
+    }
+  }
+  var PDU_GTPCv2 v_pdu_gtpcv2 := valueof(t_pdu_gtpcv2('29'O,v_gtpcv2_pdu));
+  log("Original: ", v_pdu_gtpcv2);
+  var octetstring v_gtp_encoded := enc_PDU_GTPCv2(v_pdu_gtpcv2);
+  log("Encoded value: ", v_gtp_encoded);
+  var PDU_GTPCv2 v_gtp_decoded := dec_PDU_GTPCv2(v_gtp_encoded);
+  log("Decoded: ", v_gtp_decoded);
+  if(not match(v_gtp_decoded,t_m_pdu_gtpcv2('29'O,v_gtpcv2_pdu))) {
+    setverdict(fail);
+  } 
+  setverdict(pass);
+}
+
+control{
+  execute(tc_createSessionRequest());
+  execute(tc_createSessionResponse());
+  execute(tc_createBearerRequest());
+  execute(tc_createBearerResponse());
+  execute(tc_bearerResourceCommand());
+  execute(tc_bearerResourceFailureIndication());
+  execute(tc_modifyBearerRequest());
+  execute(tc_modifyBearerResponse());
+  execute(tc_deleteSessionRequest());
+  execute(tc_deleteBearerRequest());
+  execute(tc_deleteSessionResponse());
+  execute(tc_deleteBearerResponse());
+  execute(tc_downlinkDataNotification());
+  execute(tc_modifyBearerCommand());
+  execute(tc_modifyBearerFailureIndication());
+  execute(tc_updateBearerRequest());
+  execute(tc_updateBearerResponse());
+  execute(tc_deleteBearerCommand());
+  execute(tc_deleteBearerFailureIndication2());
+  execute(tc_deleteBearerFailureIndication());
+  execute(tc_releaseAccessBearersRequest());
+  execute(tc_releaseAccessBearersResponse());
+  execute(tc_stopPagingIndication());
+  execute(tc_modifyAccessBearersResponse());
+  execute(tc_forwardRelocationResponse());
+  execute(tc_contextRequest());
+  execute(tc_changeNotificationRequest());
+  execute(tc_changeNotificationResponse());
+  execute(tc_contextResponse());
+  execute(tc_remoteUEReportNotification());
+  execute(tc_remoteUEReportAcknowledge());
+};
+
+}
diff --git a/test/GTPv2_v15.2.0_CNL113870_test.tpd b/test/GTPv2_v15.2.0_CNL113870_test.tpd
new file mode 100644
index 0000000..56e6f45
--- /dev/null
+++ b/test/GTPv2_v15.2.0_CNL113870_test.tpd
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<TITAN_Project_File_Information version="1.0">
+  <ProjectName>GTPv2_v15.2.0_CNL113870_test</ProjectName>
+  <ReferencedProjects>
+    <ReferencedProject name="GTPv2_v15.2.0_CNL113870" projectLocationURI="../GTPv2_v15.2.0_CNL113870.tpd"/>
+  </ReferencedProjects>
+  <Files>
+    <FileResource projectRelativePath="GTPv2_Test.cfg" relativeURI="GTPv2_Test.cfg"/>
+    <FileResource projectRelativePath="GTPv2_Test.ttcn" relativeURI="GTPv2_Test.ttcn"/>
+  </Files>
+  <ActiveConfiguration>Default</ActiveConfiguration>
+  <Configurations>
+    <Configuration name="Default">
+      <ProjectProperties>
+        <MakefileSettings>
+          <generateInternalMakefile>true</generateInternalMakefile>
+          <GNUMake>true</GNUMake>
+          <incrementalDependencyRefresh>true</incrementalDependencyRefresh>
+          <targetExecutable>bin/GTPv2_v15.2.0_CNL113870_test</targetExecutable>
+          <buildLevel>Level 3 - Creating object files with dependency update</buildLevel>
+        </MakefileSettings>
+        <LocalBuildSettings>
+          <workingDirectory>bin</workingDirectory>
+        </LocalBuildSettings>
+      </ProjectProperties>
+    </Configuration>
+  </Configurations>
+</TITAN_Project_File_Information>
