Generated C files for E2AP v2.0
[sim/e2-interface.git] / e2sim / previous / e2apv1sim / e2sim / src / ASN1 / generated / X2AP-IEs.hpp
diff --git a/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/X2AP-IEs.hpp b/e2sim/previous/e2apv1sim/e2sim/src/ASN1/generated/X2AP-IEs.hpp
deleted file mode 100644 (file)
index f056563..0000000
+++ /dev/null
@@ -1,35962 +0,0 @@
-/*****************************************************************************
-# Copyright 2019 AT&T Intellectual Property                                  *
-#                                                                            *
-# Licensed under the Apache License, Version 2.0 (the "License");            *
-# you may not use this file except in compliance with the License.           *
-# You may obtain a copy of the License at                                    *
-#                                                                            *
-#      http://www.apache.org/licenses/LICENSE-2.0                            *
-#                                                                            *
-# Unless required by applicable law or agreed to in writing, software        *
-# distributed under the License is distributed on an "AS IS" BASIS,          *
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   *
-# See the License for the specific language governing permissions and        *
-# limitations under the License.                                             *
-#                                                                            *
-******************************************************************************/
-
-#pragma once
-
-#include "asn/asn.hpp"
-static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)");
-
-#include "X2AP-Constants.hpp"
-#include "X2AP-CommonDataTypes.hpp"
-#include "X2AP-Containers.hpp"
-
-/*
-DL-ABS-status::= INTEGER (0..100)
-*/
-
-struct DL_ABS_status : asn::integer<>
-{
-       using constraint_t = asn::constraints<false,asn::span<0, 100>>;
-       static constexpr const char* name() {return "DL-ABS-status";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-UsableABSInformationFDD-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct UsableABSInformationFDD_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-UsableABSInformationFDD ::= SEQUENCE {
-       usable-abs-pattern-info                         BIT STRING (SIZE(40)),
-       iE-Extensions                                           ProtocolExtensionContainer { {UsableABSInformationFDD-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct UsableABSInformationFDD : asn::sequence<2, 0, true, 1>
-{
-       static constexpr const char* name() {return "UsableABSInformationFDD";}
-       using parent_t = asn::sequence<2, 0, true, 1>;
-       struct usable_abs_pattern_info_t : asn::bstring<>
-       {
-               using constraint_t = asn::constraints<false,asn::one<40>>;
-               static constexpr const char* name() {return "usable_abs_pattern_info_t";}
-               using parent_t = asn::bstring<>;
-
-       };
-
-       usable_abs_pattern_info_t& ref_usable_abs_pattern_info() {return usable_abs_pattern_info;}
-       usable_abs_pattern_info_t const& ref_usable_abs_pattern_info() const {return usable_abs_pattern_info;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<UsableABSInformationFDD_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<UsableABSInformationFDD_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(usable_abs_pattern_info);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(usable_abs_pattern_info);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               usable_abs_pattern_info.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       usable_abs_pattern_info_t       usable_abs_pattern_info;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-UsableABSInformationTDD-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct UsableABSInformationTDD_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-UsableABSInformationTDD ::= SEQUENCE {
-       usaable-abs-pattern-info                        BIT STRING (SIZE(1..70, ...)),
-       iE-Extensions                                           ProtocolExtensionContainer { {UsableABSInformationTDD-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct UsableABSInformationTDD : asn::sequence<2, 0, true, 1>
-{
-       static constexpr const char* name() {return "UsableABSInformationTDD";}
-       using parent_t = asn::sequence<2, 0, true, 1>;
-       struct usaable_abs_pattern_info_t : asn::bstring<>
-       {
-               using constraint_t = asn::constraints<true,asn::span<1, 70>>;
-               static constexpr const char* name() {return "usaable_abs_pattern_info_t";}
-               using parent_t = asn::bstring<>;
-
-       };
-
-       usaable_abs_pattern_info_t& ref_usaable_abs_pattern_info() {return usaable_abs_pattern_info;}
-       usaable_abs_pattern_info_t const& ref_usaable_abs_pattern_info() const {return usaable_abs_pattern_info;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<UsableABSInformationTDD_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<UsableABSInformationTDD_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(usaable_abs_pattern_info);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(usaable_abs_pattern_info);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               usaable_abs_pattern_info.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       usaable_abs_pattern_info_t      usaable_abs_pattern_info;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-UsableABSInformation ::= CHOICE {
-       fdd                                     UsableABSInformationFDD,
-       tdd                                     UsableABSInformationTDD,
-       ...
-}
-*/
-
-struct UsableABSInformation : asn::choice<2, 0, true>
-{
-       static constexpr const char* name() {return "UsableABSInformation";}
-       using parent_t = asn::choice<2, 0, true>;
-       index_type get_index() const {return index;}
-       bool is_unknown() const {return index == 3;}
-       void set_unknown() { set_index(3);  }
-       ~UsableABSInformation() {clear();}
-       struct fdd_t : UsableABSInformationFDD
-       {
-               static constexpr const char* name() {return "fdd_t";}
-               using parent_t = UsableABSInformationFDD;
-
-       };
-       struct tdd_t : UsableABSInformationTDD
-       {
-               static constexpr const char* name() {return "tdd_t";}
-               using parent_t = UsableABSInformationTDD;
-
-       };
-       void clear()
-       {
-               switch(get_index())
-               {
-               case 1: var.destroy<fdd_t>(); break;
-               case 2: var.destroy<tdd_t>(); break;
-               }
-               index = 0;
-               base::clear();
-       }
-       template<typename V> bool decode(size_t idx, V& v)
-       {
-               clear();
-               switch(idx)
-               {
-               case 1: set_index(1); return v(var.build<fdd_t>());
-               case 2: set_index(2); return v(var.build<tdd_t>());
-               }
-               return false;
-
-       }
-       template<typename V> bool encode(V& v) const
-       {
-               switch(get_index())
-               {
-               case 1: return v(var.as<fdd_t>());
-               case 2: return v(var.as<tdd_t>());
-               }
-               return false;
-       }
-       template<typename V> static inline void enumerate(V& v)
-       {
-               v.template operator()<fdd_t>(1);
-               v.template operator()<tdd_t>(2);
-
-       }
-       fdd_t& select_fdd() { if(get_index() != 1) { clear(); set_index(1); return var.build<fdd_t>();} return var.as<fdd_t>();}
-       fdd_t const* get_fdd() const { if(get_index() == 1) { return &var.as<fdd_t>();} return nullptr; }
-       tdd_t& select_tdd() { if(get_index() != 2) { clear(); set_index(2); return var.build<tdd_t>();} return var.as<tdd_t>();}
-       tdd_t const* get_tdd() const { if(get_index() == 2) { return &var.as<tdd_t>();} return nullptr; }
-       private:
-       void set_index(index_type i) {index = i; base::set();}
-       union union_type
-       {
-               char dummy1[sizeof(fdd_t)];
-               char dummy2[sizeof(tdd_t)];
-
-       };
-       asn::variant<sizeof(union_type)>        var;
-       index_type      index {0};
-};
-/*
-ABS-Status-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct ABS_Status_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-ABS-Status ::= SEQUENCE {
-       dL-ABS-status                                                           DL-ABS-status,
-       usableABSInformation                                            UsableABSInformation,
-       iE-Extensions                                                           ProtocolExtensionContainer { {ABS-Status-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct ABS_Status : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "ABS-Status";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct dL_ABS_status_t : DL_ABS_status
-       {
-               static constexpr const char* name() {return "dL_ABS_status_t";}
-               using parent_t = DL_ABS_status;
-
-       };
-       dL_ABS_status_t& ref_dL_ABS_status() {return dL_ABS_status;}
-       dL_ABS_status_t const& ref_dL_ABS_status() const {return dL_ABS_status;}
-       struct usableABSInformation_t : UsableABSInformation
-       {
-               static constexpr const char* name() {return "usableABSInformation_t";}
-               using parent_t = UsableABSInformation;
-
-       };
-       usableABSInformation_t& ref_usableABSInformation() {return usableABSInformation;}
-       usableABSInformation_t const& ref_usableABSInformation() const {return usableABSInformation;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<ABS_Status_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<ABS_Status_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(dL_ABS_status);
-               v(usableABSInformation);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(dL_ABS_status);
-               v(usableABSInformation);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               dL_ABS_status.clear();
-               usableABSInformation.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       dL_ABS_status_t dL_ABS_status;
-       usableABSInformation_t  usableABSInformation;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-ABSInformationFDD-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct ABSInformationFDD_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-ABSInformationFDD ::= SEQUENCE {
-       abs-pattern-info                                        BIT STRING (SIZE(40)),
-       numberOfCellSpecificAntennaPorts        ENUMERATED {one, two, four, ...},
-       measurement-subset                                      BIT STRING (SIZE(40)),
-       iE-Extensions                                           ProtocolExtensionContainer { {ABSInformationFDD-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct ABSInformationFDD : asn::sequence<4, 0, true, 1>
-{
-       static constexpr const char* name() {return "ABSInformationFDD";}
-       using parent_t = asn::sequence<4, 0, true, 1>;
-       struct abs_pattern_info_t : asn::bstring<>
-       {
-               using constraint_t = asn::constraints<false,asn::one<40>>;
-               static constexpr const char* name() {return "abs_pattern_info_t";}
-               using parent_t = asn::bstring<>;
-
-       };
-
-       abs_pattern_info_t& ref_abs_pattern_info() {return abs_pattern_info;}
-       abs_pattern_info_t const& ref_abs_pattern_info() const {return abs_pattern_info;}
-       struct numberOfCellSpecificAntennaPorts_t : asn::enumerated<3, 0, true>
-       {
-               static constexpr const char* name() {return "numberOfCellSpecificAntennaPorts_t";}
-               using parent_t = asn::enumerated<3, 0, true>;
-               typedef enum {
-                       one
-                       ,two
-                       ,four
-               } index_t;
-
-       };
-
-       numberOfCellSpecificAntennaPorts_t& ref_numberOfCellSpecificAntennaPorts() {return numberOfCellSpecificAntennaPorts;}
-       numberOfCellSpecificAntennaPorts_t const& ref_numberOfCellSpecificAntennaPorts() const {return numberOfCellSpecificAntennaPorts;}
-       struct measurement_subset_t : asn::bstring<>
-       {
-               using constraint_t = asn::constraints<false,asn::one<40>>;
-               static constexpr const char* name() {return "measurement_subset_t";}
-               using parent_t = asn::bstring<>;
-
-       };
-
-       measurement_subset_t& ref_measurement_subset() {return measurement_subset;}
-       measurement_subset_t const& ref_measurement_subset() const {return measurement_subset;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<ABSInformationFDD_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<ABSInformationFDD_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(abs_pattern_info);
-               v(numberOfCellSpecificAntennaPorts);
-               v(measurement_subset);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(abs_pattern_info);
-               v(numberOfCellSpecificAntennaPorts);
-               v(measurement_subset);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               abs_pattern_info.clear();
-               numberOfCellSpecificAntennaPorts.clear();
-               measurement_subset.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       abs_pattern_info_t      abs_pattern_info;
-       numberOfCellSpecificAntennaPorts_t      numberOfCellSpecificAntennaPorts;
-       measurement_subset_t    measurement_subset;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-ABSInformationTDD-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct ABSInformationTDD_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-ABSInformationTDD ::= SEQUENCE {
-       abs-pattern-info                                        BIT STRING (SIZE(1..70, ...)),
-       numberOfCellSpecificAntennaPorts        ENUMERATED {one, two, four, ...},
-       measurement-subset                                      BIT STRING (SIZE(1..70, ...)),
-       iE-Extensions                                           ProtocolExtensionContainer { {ABSInformationTDD-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct ABSInformationTDD : asn::sequence<4, 0, true, 1>
-{
-       static constexpr const char* name() {return "ABSInformationTDD";}
-       using parent_t = asn::sequence<4, 0, true, 1>;
-       struct abs_pattern_info_t : asn::bstring<>
-       {
-               using constraint_t = asn::constraints<true,asn::span<1, 70>>;
-               static constexpr const char* name() {return "abs_pattern_info_t";}
-               using parent_t = asn::bstring<>;
-
-       };
-
-       abs_pattern_info_t& ref_abs_pattern_info() {return abs_pattern_info;}
-       abs_pattern_info_t const& ref_abs_pattern_info() const {return abs_pattern_info;}
-       struct numberOfCellSpecificAntennaPorts_t : asn::enumerated<3, 0, true>
-       {
-               static constexpr const char* name() {return "numberOfCellSpecificAntennaPorts_t";}
-               using parent_t = asn::enumerated<3, 0, true>;
-               typedef enum {
-                       one
-                       ,two
-                       ,four
-               } index_t;
-
-       };
-
-       numberOfCellSpecificAntennaPorts_t& ref_numberOfCellSpecificAntennaPorts() {return numberOfCellSpecificAntennaPorts;}
-       numberOfCellSpecificAntennaPorts_t const& ref_numberOfCellSpecificAntennaPorts() const {return numberOfCellSpecificAntennaPorts;}
-       struct measurement_subset_t : asn::bstring<>
-       {
-               using constraint_t = asn::constraints<true,asn::span<1, 70>>;
-               static constexpr const char* name() {return "measurement_subset_t";}
-               using parent_t = asn::bstring<>;
-
-       };
-
-       measurement_subset_t& ref_measurement_subset() {return measurement_subset;}
-       measurement_subset_t const& ref_measurement_subset() const {return measurement_subset;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<ABSInformationTDD_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<ABSInformationTDD_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(abs_pattern_info);
-               v(numberOfCellSpecificAntennaPorts);
-               v(measurement_subset);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(abs_pattern_info);
-               v(numberOfCellSpecificAntennaPorts);
-               v(measurement_subset);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               abs_pattern_info.clear();
-               numberOfCellSpecificAntennaPorts.clear();
-               measurement_subset.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       abs_pattern_info_t      abs_pattern_info;
-       numberOfCellSpecificAntennaPorts_t      numberOfCellSpecificAntennaPorts;
-       measurement_subset_t    measurement_subset;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-ABSInformation ::= CHOICE {
-       fdd                                     ABSInformationFDD,
-       tdd                                     ABSInformationTDD,
-       abs-inactive            NULL,
-       ...
-}
-*/
-
-struct ABSInformation : asn::choice<3, 0, true>
-{
-       static constexpr const char* name() {return "ABSInformation";}
-       using parent_t = asn::choice<3, 0, true>;
-       index_type get_index() const {return index;}
-       bool is_unknown() const {return index == 4;}
-       void set_unknown() { set_index(4);  }
-       ~ABSInformation() {clear();}
-       struct fdd_t : ABSInformationFDD
-       {
-               static constexpr const char* name() {return "fdd_t";}
-               using parent_t = ABSInformationFDD;
-
-       };
-       struct tdd_t : ABSInformationTDD
-       {
-               static constexpr const char* name() {return "tdd_t";}
-               using parent_t = ABSInformationTDD;
-
-       };
-       struct abs_inactive_t : asn::nulltype
-       {
-               static constexpr const char* name() {return "abs_inactive_t";}
-               using parent_t = asn::nulltype;
-
-       };
-       void clear()
-       {
-               switch(get_index())
-               {
-               case 1: var.destroy<fdd_t>(); break;
-               case 2: var.destroy<tdd_t>(); break;
-               case 3: var.destroy<abs_inactive_t>(); break;
-               }
-               index = 0;
-               base::clear();
-       }
-       template<typename V> bool decode(size_t idx, V& v)
-       {
-               clear();
-               switch(idx)
-               {
-               case 1: set_index(1); return v(var.build<fdd_t>());
-               case 2: set_index(2); return v(var.build<tdd_t>());
-               case 3: set_index(3); return v(var.build<abs_inactive_t>());
-               }
-               return false;
-
-       }
-       template<typename V> bool encode(V& v) const
-       {
-               switch(get_index())
-               {
-               case 1: return v(var.as<fdd_t>());
-               case 2: return v(var.as<tdd_t>());
-               case 3: return v(var.as<abs_inactive_t>());
-               }
-               return false;
-       }
-       template<typename V> static inline void enumerate(V& v)
-       {
-               v.template operator()<fdd_t>(1);
-               v.template operator()<tdd_t>(2);
-               v.template operator()<abs_inactive_t>(3);
-
-       }
-       fdd_t& select_fdd() { if(get_index() != 1) { clear(); set_index(1); return var.build<fdd_t>();} return var.as<fdd_t>();}
-       fdd_t const* get_fdd() const { if(get_index() == 1) { return &var.as<fdd_t>();} return nullptr; }
-       tdd_t& select_tdd() { if(get_index() != 2) { clear(); set_index(2); return var.build<tdd_t>();} return var.as<tdd_t>();}
-       tdd_t const* get_tdd() const { if(get_index() == 2) { return &var.as<tdd_t>();} return nullptr; }
-       abs_inactive_t& select_abs_inactive() { if(get_index() != 3) { clear(); set_index(3); return var.build<abs_inactive_t>();} return var.as<abs_inactive_t>();}
-       abs_inactive_t const* get_abs_inactive() const { if(get_index() == 3) { return &var.as<abs_inactive_t>();} return nullptr; }
-       private:
-       void set_index(index_type i) {index = i; base::set();}
-       union union_type
-       {
-               char dummy1[sizeof(fdd_t)];
-               char dummy2[sizeof(tdd_t)];
-               char dummy3[sizeof(abs_inactive_t)];
-
-       };
-       asn::variant<sizeof(union_type)>        var;
-       index_type      index {0};
-};
-/*
-Key-eNodeB-Star ::= BIT STRING (SIZE(256))
-*/
-
-struct Key_eNodeB_Star : asn::bstring<>
-{
-       using constraint_t = asn::constraints<false,asn::one<256>>;
-       static constexpr const char* name() {return "Key-eNodeB-Star";}
-       using parent_t = asn::bstring<>;
-
-};
-
-/*
-NextHopChainingCount ::= INTEGER (0..7)
-*/
-
-struct NextHopChainingCount : asn::integer<>
-{
-       using constraint_t = asn::constraints<false,asn::span<0, 7>>;
-       static constexpr const char* name() {return "NextHopChainingCount";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-AS-SecurityInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct AS_SecurityInformation_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-AS-SecurityInformation ::= SEQUENCE {
-       key-eNodeB-star         Key-eNodeB-Star,
-       nextHopChainingCount                    NextHopChainingCount,
-       iE-Extensions                                           ProtocolExtensionContainer { {AS-SecurityInformation-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct AS_SecurityInformation : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "AS-SecurityInformation";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct key_eNodeB_star_t : Key_eNodeB_Star
-       {
-               static constexpr const char* name() {return "key_eNodeB_star_t";}
-               using parent_t = Key_eNodeB_Star;
-
-       };
-       key_eNodeB_star_t& ref_key_eNodeB_star() {return key_eNodeB_star;}
-       key_eNodeB_star_t const& ref_key_eNodeB_star() const {return key_eNodeB_star;}
-       struct nextHopChainingCount_t : NextHopChainingCount
-       {
-               static constexpr const char* name() {return "nextHopChainingCount_t";}
-               using parent_t = NextHopChainingCount;
-
-       };
-       nextHopChainingCount_t& ref_nextHopChainingCount() {return nextHopChainingCount;}
-       nextHopChainingCount_t const& ref_nextHopChainingCount() const {return nextHopChainingCount;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<AS_SecurityInformation_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<AS_SecurityInformation_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(key_eNodeB_star);
-               v(nextHopChainingCount);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(key_eNodeB_star);
-               v(nextHopChainingCount);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               key_eNodeB_star.clear();
-               nextHopChainingCount.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       key_eNodeB_star_t       key_eNodeB_star;
-       nextHopChainingCount_t  nextHopChainingCount;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-ActivationID ::= INTEGER (0..255)
-*/
-
-struct ActivationID : asn::integer<>
-{
-       using constraint_t = asn::constraints<false,asn::span<0, 255>>;
-       static constexpr const char* name() {return "ActivationID";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-AdditionalSpecialSubframePatterns ::= ENUMERATED {
-       ssp0,
-       ssp1,
-       ssp2,
-       ssp3,
-       ssp4,
-       ssp5,
-       ssp6,
-       ssp7,
-       ssp8,
-       ssp9,
-       ...
-}
-*/
-
-struct AdditionalSpecialSubframePatterns : asn::enumerated<10, 0, true>
-{
-       static constexpr const char* name() {return "AdditionalSpecialSubframePatterns";}
-       using parent_t = asn::enumerated<10, 0, true>;
-       typedef enum {
-               ssp0
-               ,ssp1
-               ,ssp2
-               ,ssp3
-               ,ssp4
-               ,ssp5
-               ,ssp6
-               ,ssp7
-               ,ssp8
-               ,ssp9
-       } index_t;
-
-};
-
-/*
-CyclicPrefixDL ::= ENUMERATED {
-       normal,
-       extended,
-       ...
-}
-*/
-
-struct CyclicPrefixDL : asn::enumerated<2, 0, true>
-{
-       static constexpr const char* name() {return "CyclicPrefixDL";}
-       using parent_t = asn::enumerated<2, 0, true>;
-       typedef enum {
-               normal
-               ,extended
-       } index_t;
-
-};
-
-/*
-CyclicPrefixUL ::= ENUMERATED {
-       normal,
-       extended,
-       ...
-}
-*/
-
-struct CyclicPrefixUL : asn::enumerated<2, 0, true>
-{
-       static constexpr const char* name() {return "CyclicPrefixUL";}
-       using parent_t = asn::enumerated<2, 0, true>;
-       typedef enum {
-               normal
-               ,extended
-       } index_t;
-
-};
-
-/*
-AdditionalSpecialSubframe-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct AdditionalSpecialSubframe_Info_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-AdditionalSpecialSubframe-Info ::=             SEQUENCE {
-       additionalspecialSubframePatterns               AdditionalSpecialSubframePatterns,
-       cyclicPrefixDL                                                  CyclicPrefixDL,
-       cyclicPrefixUL                                                  CyclicPrefixUL,
-       iE-Extensions                                                   ProtocolExtensionContainer { {AdditionalSpecialSubframe-Info-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct AdditionalSpecialSubframe_Info : asn::sequence<4, 0, true, 1>
-{
-       static constexpr const char* name() {return "AdditionalSpecialSubframe-Info";}
-       using parent_t = asn::sequence<4, 0, true, 1>;
-       struct additionalspecialSubframePatterns_t : AdditionalSpecialSubframePatterns
-       {
-               static constexpr const char* name() {return "additionalspecialSubframePatterns_t";}
-               using parent_t = AdditionalSpecialSubframePatterns;
-
-       };
-       additionalspecialSubframePatterns_t& ref_additionalspecialSubframePatterns() {return additionalspecialSubframePatterns;}
-       additionalspecialSubframePatterns_t const& ref_additionalspecialSubframePatterns() const {return additionalspecialSubframePatterns;}
-       struct cyclicPrefixDL_t : CyclicPrefixDL
-       {
-               static constexpr const char* name() {return "cyclicPrefixDL_t";}
-               using parent_t = CyclicPrefixDL;
-
-       };
-       cyclicPrefixDL_t& ref_cyclicPrefixDL() {return cyclicPrefixDL;}
-       cyclicPrefixDL_t const& ref_cyclicPrefixDL() const {return cyclicPrefixDL;}
-       struct cyclicPrefixUL_t : CyclicPrefixUL
-       {
-               static constexpr const char* name() {return "cyclicPrefixUL_t";}
-               using parent_t = CyclicPrefixUL;
-
-       };
-       cyclicPrefixUL_t& ref_cyclicPrefixUL() {return cyclicPrefixUL;}
-       cyclicPrefixUL_t const& ref_cyclicPrefixUL() const {return cyclicPrefixUL;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<AdditionalSpecialSubframe_Info_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<AdditionalSpecialSubframe_Info_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(additionalspecialSubframePatterns);
-               v(cyclicPrefixDL);
-               v(cyclicPrefixUL);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(additionalspecialSubframePatterns);
-               v(cyclicPrefixDL);
-               v(cyclicPrefixUL);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               additionalspecialSubframePatterns.clear();
-               cyclicPrefixDL.clear();
-               cyclicPrefixUL.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       additionalspecialSubframePatterns_t     additionalspecialSubframePatterns;
-       cyclicPrefixDL_t        cyclicPrefixDL;
-       cyclicPrefixUL_t        cyclicPrefixUL;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-AdditionalSpecialSubframePatternsExtension ::= ENUMERATED {
-       ssp10,
-       ...
-}
-*/
-
-struct AdditionalSpecialSubframePatternsExtension : asn::enumerated<1, 0, true>
-{
-       static constexpr const char* name() {return "AdditionalSpecialSubframePatternsExtension";}
-       using parent_t = asn::enumerated<1, 0, true>;
-       typedef enum {
-               ssp10
-       } index_t;
-
-};
-
-/*
-AdditionalSpecialSubframeExtension-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct AdditionalSpecialSubframeExtension_Info_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-AdditionalSpecialSubframeExtension-Info ::=            SEQUENCE {
-       additionalspecialSubframePatternsExtension      AdditionalSpecialSubframePatternsExtension,
-       cyclicPrefixDL                                                          CyclicPrefixDL,
-       cyclicPrefixUL                                                          CyclicPrefixUL,
-       iE-Extensions                                                           ProtocolExtensionContainer { {AdditionalSpecialSubframeExtension-Info-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct AdditionalSpecialSubframeExtension_Info : asn::sequence<4, 0, true, 1>
-{
-       static constexpr const char* name() {return "AdditionalSpecialSubframeExtension-Info";}
-       using parent_t = asn::sequence<4, 0, true, 1>;
-       struct additionalspecialSubframePatternsExtension_t : AdditionalSpecialSubframePatternsExtension
-       {
-               static constexpr const char* name() {return "additionalspecialSubframePatternsExtension_t";}
-               using parent_t = AdditionalSpecialSubframePatternsExtension;
-
-       };
-       additionalspecialSubframePatternsExtension_t& ref_additionalspecialSubframePatternsExtension() {return additionalspecialSubframePatternsExtension;}
-       additionalspecialSubframePatternsExtension_t const& ref_additionalspecialSubframePatternsExtension() const {return additionalspecialSubframePatternsExtension;}
-       struct cyclicPrefixDL_t : CyclicPrefixDL
-       {
-               static constexpr const char* name() {return "cyclicPrefixDL_t";}
-               using parent_t = CyclicPrefixDL;
-
-       };
-       cyclicPrefixDL_t& ref_cyclicPrefixDL() {return cyclicPrefixDL;}
-       cyclicPrefixDL_t const& ref_cyclicPrefixDL() const {return cyclicPrefixDL;}
-       struct cyclicPrefixUL_t : CyclicPrefixUL
-       {
-               static constexpr const char* name() {return "cyclicPrefixUL_t";}
-               using parent_t = CyclicPrefixUL;
-
-       };
-       cyclicPrefixUL_t& ref_cyclicPrefixUL() {return cyclicPrefixUL;}
-       cyclicPrefixUL_t const& ref_cyclicPrefixUL() const {return cyclicPrefixUL;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<AdditionalSpecialSubframeExtension_Info_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<AdditionalSpecialSubframeExtension_Info_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(additionalspecialSubframePatternsExtension);
-               v(cyclicPrefixDL);
-               v(cyclicPrefixUL);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(additionalspecialSubframePatternsExtension);
-               v(cyclicPrefixDL);
-               v(cyclicPrefixUL);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               additionalspecialSubframePatternsExtension.clear();
-               cyclicPrefixDL.clear();
-               cyclicPrefixUL.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       additionalspecialSubframePatternsExtension_t    additionalspecialSubframePatternsExtension;
-       cyclicPrefixDL_t        cyclicPrefixDL;
-       cyclicPrefixUL_t        cyclicPrefixUL;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-AerialUEsubscriptionInformation ::= ENUMERATED {
-       allowed,
-       not-allowed,
-       ...
-}
-*/
-
-struct AerialUEsubscriptionInformation : asn::enumerated<2, 0, true>
-{
-       static constexpr const char* name() {return "AerialUEsubscriptionInformation";}
-       using parent_t = asn::enumerated<2, 0, true>;
-       typedef enum {
-               allowed
-               ,not_allowed
-       } index_t;
-
-};
-
-/*
-PriorityLevel                          ::= INTEGER { spare (0), highest (1), lowest (14), no-priority (15) } (0..15)
-*/
-
-struct PriorityLevel : asn::integer<>
-{
-       using constraint_t = asn::constraints<false,asn::span<0, 15>>;
-       static constexpr const char* name() {return "PriorityLevel";}
-       using parent_t = asn::integer<>;
-       enum {spare = 0, highest = 1, lowest = 14, no_priority = 15};
-
-};
-
-/*
-Pre-emptionCapability ::= ENUMERATED {
-       shall-not-trigger-pre-emption,
-       may-trigger-pre-emption
-}
-*/
-
-struct Pre_emptionCapability : asn::enumerated<2, 0, false>
-{
-       static constexpr const char* name() {return "Pre-emptionCapability";}
-       using parent_t = asn::enumerated<2, 0, false>;
-       typedef enum {
-               shall_not_trigger_pre_emption
-               ,may_trigger_pre_emption
-       } index_t;
-
-};
-
-/*
-Pre-emptionVulnerability ::= ENUMERATED {
-       not-pre-emptable,
-       pre-emptable
-}
-*/
-
-struct Pre_emptionVulnerability : asn::enumerated<2, 0, false>
-{
-       static constexpr const char* name() {return "Pre-emptionVulnerability";}
-       using parent_t = asn::enumerated<2, 0, false>;
-       typedef enum {
-               not_pre_emptable
-               ,pre_emptable
-       } index_t;
-
-};
-
-/*
-AllocationAndRetentionPriority-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct AllocationAndRetentionPriority_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-AllocationAndRetentionPriority ::= SEQUENCE {
-       priorityLevel                           PriorityLevel,
-       pre-emptionCapability           Pre-emptionCapability,
-       pre-emptionVulnerability        Pre-emptionVulnerability,
-       iE-Extensions                           ProtocolExtensionContainer { {AllocationAndRetentionPriority-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct AllocationAndRetentionPriority : asn::sequence<4, 0, true, 1>
-{
-       static constexpr const char* name() {return "AllocationAndRetentionPriority";}
-       using parent_t = asn::sequence<4, 0, true, 1>;
-       struct priorityLevel_t : PriorityLevel
-       {
-               static constexpr const char* name() {return "priorityLevel_t";}
-               using parent_t = PriorityLevel;
-
-       };
-       priorityLevel_t& ref_priorityLevel() {return priorityLevel;}
-       priorityLevel_t const& ref_priorityLevel() const {return priorityLevel;}
-       struct pre_emptionCapability_t : Pre_emptionCapability
-       {
-               static constexpr const char* name() {return "pre_emptionCapability_t";}
-               using parent_t = Pre_emptionCapability;
-
-       };
-       pre_emptionCapability_t& ref_pre_emptionCapability() {return pre_emptionCapability;}
-       pre_emptionCapability_t const& ref_pre_emptionCapability() const {return pre_emptionCapability;}
-       struct pre_emptionVulnerability_t : Pre_emptionVulnerability
-       {
-               static constexpr const char* name() {return "pre_emptionVulnerability_t";}
-               using parent_t = Pre_emptionVulnerability;
-
-       };
-       pre_emptionVulnerability_t& ref_pre_emptionVulnerability() {return pre_emptionVulnerability;}
-       pre_emptionVulnerability_t const& ref_pre_emptionVulnerability() const {return pre_emptionVulnerability;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<AllocationAndRetentionPriority_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<AllocationAndRetentionPriority_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(priorityLevel);
-               v(pre_emptionCapability);
-               v(pre_emptionVulnerability);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(priorityLevel);
-               v(pre_emptionCapability);
-               v(pre_emptionVulnerability);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               priorityLevel.clear();
-               pre_emptionCapability.clear();
-               pre_emptionVulnerability.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       priorityLevel_t priorityLevel;
-       pre_emptionCapability_t pre_emptionCapability;
-       pre_emptionVulnerability_t      pre_emptionVulnerability;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-PLMN-Identity ::= OCTET STRING (SIZE(3))
-*/
-
-struct PLMN_Identity : asn::ostring<>
-{
-       using constraint_t = asn::constraints<false,asn::one<3>>;
-       static constexpr const char* name() {return "PLMN-Identity";}
-       using parent_t = asn::ostring<>;
-
-};
-
-/*
-EUTRANCellIdentifier ::= BIT STRING (SIZE (28))
-*/
-
-struct EUTRANCellIdentifier : asn::bstring<>
-{
-       using constraint_t = asn::constraints<false,asn::one<28>>;
-       static constexpr const char* name() {return "EUTRANCellIdentifier";}
-       using parent_t = asn::bstring<>;
-
-};
-
-/*
-ECGI-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct ECGI_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-ECGI ::= SEQUENCE {
-       pLMN-Identity                           PLMN-Identity,
-       eUTRANcellIdentifier            EUTRANCellIdentifier,
-       iE-Extensions                           ProtocolExtensionContainer { {ECGI-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct ECGI : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "ECGI";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct pLMN_Identity_t : PLMN_Identity
-       {
-               static constexpr const char* name() {return "pLMN_Identity_t";}
-               using parent_t = PLMN_Identity;
-
-       };
-       pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;}
-       pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;}
-       struct eUTRANcellIdentifier_t : EUTRANCellIdentifier
-       {
-               static constexpr const char* name() {return "eUTRANcellIdentifier_t";}
-               using parent_t = EUTRANCellIdentifier;
-
-       };
-       eUTRANcellIdentifier_t& ref_eUTRANcellIdentifier() {return eUTRANcellIdentifier;}
-       eUTRANcellIdentifier_t const& ref_eUTRANcellIdentifier() const {return eUTRANcellIdentifier;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<ECGI_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<ECGI_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(pLMN_Identity);
-               v(eUTRANcellIdentifier);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(pLMN_Identity);
-               v(eUTRANcellIdentifier);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               pLMN_Identity.clear();
-               eUTRANcellIdentifier.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       pLMN_Identity_t pLMN_Identity;
-       eUTRANcellIdentifier_t  eUTRANcellIdentifier;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-CellIdListforMDT ::= SEQUENCE (SIZE(1..maxnoofCellIDforMDT)) OF ECGI
-*/
-
-struct CellIdListforMDT_elm : ECGI
-{
-       static constexpr const char* name() {return "CellIdListforMDT_elm";}
-       using parent_t = ECGI;
-
-};
-struct CellIdListforMDT : asn::sequenceof<CellIdListforMDT_elm>
-{
-       static constexpr const char* name() {return "CellIdListforMDT";}
-       using parent_t = asn::sequenceof<CellIdListforMDT_elm>;
-       using constraint_t = asn::constraints<false,asn::span<1,  maxnoofCellIDforMDT >>;
-
-};
-/*
-CellBasedMDT-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct CellBasedMDT_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-CellBasedMDT::= SEQUENCE {
-       cellIdListforMDT        CellIdListforMDT,
-       iE-Extensions           ProtocolExtensionContainer { {CellBasedMDT-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct CellBasedMDT : asn::sequence<2, 0, true, 1>
-{
-       static constexpr const char* name() {return "CellBasedMDT";}
-       using parent_t = asn::sequence<2, 0, true, 1>;
-       struct cellIdListforMDT_t : CellIdListforMDT
-       {
-               static constexpr const char* name() {return "cellIdListforMDT_t";}
-               using parent_t = CellIdListforMDT;
-
-       };
-       cellIdListforMDT_t& ref_cellIdListforMDT() {return cellIdListforMDT;}
-       cellIdListforMDT_t const& ref_cellIdListforMDT() const {return cellIdListforMDT;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<CellBasedMDT_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<CellBasedMDT_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(cellIdListforMDT);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(cellIdListforMDT);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               cellIdListforMDT.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       cellIdListforMDT_t      cellIdListforMDT;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-TAC ::= OCTET STRING (SIZE (2))
-*/
-
-struct TAC : asn::ostring<>
-{
-       using constraint_t = asn::constraints<false,asn::one<2>>;
-       static constexpr const char* name() {return "TAC";}
-       using parent_t = asn::ostring<>;
-
-};
-
-/*
-TAListforMDT ::= SEQUENCE (SIZE(1..maxnoofTAforMDT)) OF TAC
-*/
-
-struct TAListforMDT_elm : TAC
-{
-       static constexpr const char* name() {return "TAListforMDT_elm";}
-       using parent_t = TAC;
-
-};
-struct TAListforMDT : asn::sequenceof<TAListforMDT_elm>
-{
-       static constexpr const char* name() {return "TAListforMDT";}
-       using parent_t = asn::sequenceof<TAListforMDT_elm>;
-       using constraint_t = asn::constraints<false,asn::span<1,  maxnoofTAforMDT >>;
-
-};
-/*
-TABasedMDT-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct TABasedMDT_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-TABasedMDT::= SEQUENCE {
-       tAListforMDT            TAListforMDT,
-       iE-Extensions           ProtocolExtensionContainer { {TABasedMDT-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct TABasedMDT : asn::sequence<2, 0, true, 1>
-{
-       static constexpr const char* name() {return "TABasedMDT";}
-       using parent_t = asn::sequence<2, 0, true, 1>;
-       struct tAListforMDT_t : TAListforMDT
-       {
-               static constexpr const char* name() {return "tAListforMDT_t";}
-               using parent_t = TAListforMDT;
-
-       };
-       tAListforMDT_t& ref_tAListforMDT() {return tAListforMDT;}
-       tAListforMDT_t const& ref_tAListforMDT() const {return tAListforMDT;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<TABasedMDT_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<TABasedMDT_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(tAListforMDT);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(tAListforMDT);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               tAListforMDT.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       tAListforMDT_t  tAListforMDT;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-TAI-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct TAI_Item_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-TAI-Item ::= SEQUENCE {
-       tAC                                     TAC,
-       pLMN-Identity           PLMN-Identity,
-       iE-Extensions           ProtocolExtensionContainer { {TAI-Item-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct TAI_Item : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "TAI-Item";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct tAC_t : TAC
-       {
-               static constexpr const char* name() {return "tAC_t";}
-               using parent_t = TAC;
-
-       };
-       tAC_t& ref_tAC() {return tAC;}
-       tAC_t const& ref_tAC() const {return tAC;}
-       struct pLMN_Identity_t : PLMN_Identity
-       {
-               static constexpr const char* name() {return "pLMN_Identity_t";}
-               using parent_t = PLMN_Identity;
-
-       };
-       pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;}
-       pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<TAI_Item_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<TAI_Item_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(tAC);
-               v(pLMN_Identity);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(tAC);
-               v(pLMN_Identity);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               tAC.clear();
-               pLMN_Identity.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       tAC_t   tAC;
-       pLMN_Identity_t pLMN_Identity;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-TAIListforMDT ::= SEQUENCE (SIZE(1..maxnoofTAforMDT)) OF TAI-Item
-*/
-
-struct TAIListforMDT_elm : TAI_Item
-{
-       static constexpr const char* name() {return "TAIListforMDT_elm";}
-       using parent_t = TAI_Item;
-
-};
-struct TAIListforMDT : asn::sequenceof<TAIListforMDT_elm>
-{
-       static constexpr const char* name() {return "TAIListforMDT";}
-       using parent_t = asn::sequenceof<TAIListforMDT_elm>;
-       using constraint_t = asn::constraints<false,asn::span<1,  maxnoofTAforMDT >>;
-
-};
-/*
-TAIBasedMDT-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct TAIBasedMDT_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-TAIBasedMDT ::= SEQUENCE {
-       tAIListforMDT                   TAIListforMDT,
-       iE-Extensions                   ProtocolExtensionContainer { {TAIBasedMDT-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct TAIBasedMDT : asn::sequence<2, 0, true, 1>
-{
-       static constexpr const char* name() {return "TAIBasedMDT";}
-       using parent_t = asn::sequence<2, 0, true, 1>;
-       struct tAIListforMDT_t : TAIListforMDT
-       {
-               static constexpr const char* name() {return "tAIListforMDT_t";}
-               using parent_t = TAIListforMDT;
-
-       };
-       tAIListforMDT_t& ref_tAIListforMDT() {return tAIListforMDT;}
-       tAIListforMDT_t const& ref_tAIListforMDT() const {return tAIListforMDT;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<TAIBasedMDT_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<TAIBasedMDT_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(tAIListforMDT);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(tAIListforMDT);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               tAIListforMDT.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       tAIListforMDT_t tAIListforMDT;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-AreaScopeOfMDT ::= CHOICE {
-       cellBased                                       CellBasedMDT,
-       tABased                                         TABasedMDT,
-       pLMNWide                                        NULL,
-       ...,
-       tAIBased                                        TAIBasedMDT
-}
-*/
-
-struct AreaScopeOfMDT : asn::choice<4, 1, true>
-{
-       static constexpr const char* name() {return "AreaScopeOfMDT";}
-       using parent_t = asn::choice<4, 1, true>;
-       index_type get_index() const {return index;}
-       bool is_unknown() const {return index == 5;}
-       void set_unknown() { set_index(5);  }
-       ~AreaScopeOfMDT() {clear();}
-       struct cellBased_t : CellBasedMDT
-       {
-               static constexpr const char* name() {return "cellBased_t";}
-               using parent_t = CellBasedMDT;
-
-       };
-       struct tABased_t : TABasedMDT
-       {
-               static constexpr const char* name() {return "tABased_t";}
-               using parent_t = TABasedMDT;
-
-       };
-       struct pLMNWide_t : asn::nulltype
-       {
-               static constexpr const char* name() {return "pLMNWide_t";}
-               using parent_t = asn::nulltype;
-
-       };
-       struct tAIBased_t : TAIBasedMDT
-       {
-               static constexpr const char* name() {return "tAIBased_t";}
-               using parent_t = TAIBasedMDT;
-
-       };
-       void clear()
-       {
-               switch(get_index())
-               {
-               case 1: var.destroy<cellBased_t>(); break;
-               case 2: var.destroy<tABased_t>(); break;
-               case 3: var.destroy<pLMNWide_t>(); break;
-               case 4: var.destroy<tAIBased_t>(); break;
-               }
-               index = 0;
-               base::clear();
-       }
-       template<typename V> bool decode(size_t idx, V& v)
-       {
-               clear();
-               switch(idx)
-               {
-               case 1: set_index(1); return v(var.build<cellBased_t>());
-               case 2: set_index(2); return v(var.build<tABased_t>());
-               case 3: set_index(3); return v(var.build<pLMNWide_t>());
-               case 4: set_index(4); return v(var.build<tAIBased_t>());
-               }
-               return false;
-
-       }
-       template<typename V> bool encode(V& v) const
-       {
-               switch(get_index())
-               {
-               case 1: return v(var.as<cellBased_t>());
-               case 2: return v(var.as<tABased_t>());
-               case 3: return v(var.as<pLMNWide_t>());
-               case 4: return v(var.as<tAIBased_t>());
-               }
-               return false;
-       }
-       template<typename V> static inline void enumerate(V& v)
-       {
-               v.template operator()<cellBased_t>(1);
-               v.template operator()<tABased_t>(2);
-               v.template operator()<pLMNWide_t>(3);
-               v.template operator()<tAIBased_t>(4);
-
-       }
-       cellBased_t& select_cellBased() { if(get_index() != 1) { clear(); set_index(1); return var.build<cellBased_t>();} return var.as<cellBased_t>();}
-       cellBased_t const* get_cellBased() const { if(get_index() == 1) { return &var.as<cellBased_t>();} return nullptr; }
-       tABased_t& select_tABased() { if(get_index() != 2) { clear(); set_index(2); return var.build<tABased_t>();} return var.as<tABased_t>();}
-       tABased_t const* get_tABased() const { if(get_index() == 2) { return &var.as<tABased_t>();} return nullptr; }
-       pLMNWide_t& select_pLMNWide() { if(get_index() != 3) { clear(); set_index(3); return var.build<pLMNWide_t>();} return var.as<pLMNWide_t>();}
-       pLMNWide_t const* get_pLMNWide() const { if(get_index() == 3) { return &var.as<pLMNWide_t>();} return nullptr; }
-       tAIBased_t& select_tAIBased() { if(get_index() != 4) { clear(); set_index(4); return var.build<tAIBased_t>();} return var.as<tAIBased_t>();}
-       tAIBased_t const* get_tAIBased() const { if(get_index() == 4) { return &var.as<tAIBased_t>();} return nullptr; }
-       private:
-       void set_index(index_type i) {index = i; base::set();}
-       union union_type
-       {
-               char dummy1[sizeof(cellBased_t)];
-               char dummy2[sizeof(tABased_t)];
-               char dummy3[sizeof(pLMNWide_t)];
-               char dummy4[sizeof(tAIBased_t)];
-
-       };
-       asn::variant<sizeof(union_type)>        var;
-       index_type      index {0};
-};
-/*
-CellIdListforQMC ::= SEQUENCE (SIZE(1..maxnoofCellIDforQMC)) OF ECGI
-*/
-
-struct CellIdListforQMC_elm : ECGI
-{
-       static constexpr const char* name() {return "CellIdListforQMC_elm";}
-       using parent_t = ECGI;
-
-};
-struct CellIdListforQMC : asn::sequenceof<CellIdListforQMC_elm>
-{
-       static constexpr const char* name() {return "CellIdListforQMC";}
-       using parent_t = asn::sequenceof<CellIdListforQMC_elm>;
-       using constraint_t = asn::constraints<false,asn::span<1,  maxnoofCellIDforQMC >>;
-
-};
-/*
-CellBasedQMC-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct CellBasedQMC_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-CellBasedQMC::= SEQUENCE {
-       cellIdListforQMC                CellIdListforQMC,
-       iE-Extensions           ProtocolExtensionContainer { {CellBasedQMC-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct CellBasedQMC : asn::sequence<2, 0, true, 1>
-{
-       static constexpr const char* name() {return "CellBasedQMC";}
-       using parent_t = asn::sequence<2, 0, true, 1>;
-       struct cellIdListforQMC_t : CellIdListforQMC
-       {
-               static constexpr const char* name() {return "cellIdListforQMC_t";}
-               using parent_t = CellIdListforQMC;
-
-       };
-       cellIdListforQMC_t& ref_cellIdListforQMC() {return cellIdListforQMC;}
-       cellIdListforQMC_t const& ref_cellIdListforQMC() const {return cellIdListforQMC;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<CellBasedQMC_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<CellBasedQMC_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(cellIdListforQMC);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(cellIdListforQMC);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               cellIdListforQMC.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       cellIdListforQMC_t      cellIdListforQMC;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-TAListforQMC ::= SEQUENCE (SIZE(1..maxnoofTAforQMC)) OF TAC
-*/
-
-struct TAListforQMC_elm : TAC
-{
-       static constexpr const char* name() {return "TAListforQMC_elm";}
-       using parent_t = TAC;
-
-};
-struct TAListforQMC : asn::sequenceof<TAListforQMC_elm>
-{
-       static constexpr const char* name() {return "TAListforQMC";}
-       using parent_t = asn::sequenceof<TAListforQMC_elm>;
-       using constraint_t = asn::constraints<false,asn::span<1,  maxnoofTAforQMC >>;
-
-};
-/*
-TABasedQMC-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct TABasedQMC_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-TABasedQMC ::= SEQUENCE {
-       tAListforQMC            TAListforQMC,
-       iE-Extensions           ProtocolExtensionContainer { {TABasedQMC-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct TABasedQMC : asn::sequence<2, 0, true, 1>
-{
-       static constexpr const char* name() {return "TABasedQMC";}
-       using parent_t = asn::sequence<2, 0, true, 1>;
-       struct tAListforQMC_t : TAListforQMC
-       {
-               static constexpr const char* name() {return "tAListforQMC_t";}
-               using parent_t = TAListforQMC;
-
-       };
-       tAListforQMC_t& ref_tAListforQMC() {return tAListforQMC;}
-       tAListforQMC_t const& ref_tAListforQMC() const {return tAListforQMC;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<TABasedQMC_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<TABasedQMC_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(tAListforQMC);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(tAListforQMC);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               tAListforQMC.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       tAListforQMC_t  tAListforQMC;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-TAIListforQMC ::= SEQUENCE (SIZE(1..maxnoofTAforQMC)) OF TAI-Item
-*/
-
-struct TAIListforQMC_elm : TAI_Item
-{
-       static constexpr const char* name() {return "TAIListforQMC_elm";}
-       using parent_t = TAI_Item;
-
-};
-struct TAIListforQMC : asn::sequenceof<TAIListforQMC_elm>
-{
-       static constexpr const char* name() {return "TAIListforQMC";}
-       using parent_t = asn::sequenceof<TAIListforQMC_elm>;
-       using constraint_t = asn::constraints<false,asn::span<1,  maxnoofTAforQMC >>;
-
-};
-/*
-TAIBasedQMC-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct TAIBasedQMC_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-TAIBasedQMC ::= SEQUENCE {
-       tAIListforQMC           TAIListforQMC,
-       iE-Extensions           ProtocolExtensionContainer { {TAIBasedQMC-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct TAIBasedQMC : asn::sequence<2, 0, true, 1>
-{
-       static constexpr const char* name() {return "TAIBasedQMC";}
-       using parent_t = asn::sequence<2, 0, true, 1>;
-       struct tAIListforQMC_t : TAIListforQMC
-       {
-               static constexpr const char* name() {return "tAIListforQMC_t";}
-               using parent_t = TAIListforQMC;
-
-       };
-       tAIListforQMC_t& ref_tAIListforQMC() {return tAIListforQMC;}
-       tAIListforQMC_t const& ref_tAIListforQMC() const {return tAIListforQMC;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<TAIBasedQMC_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<TAIBasedQMC_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(tAIListforQMC);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(tAIListforQMC);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               tAIListforQMC.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       tAIListforQMC_t tAIListforQMC;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-PLMNListforQMC ::= SEQUENCE (SIZE(1..maxnoofPLMNforQMC)) OF PLMN-Identity
-*/
-
-struct PLMNListforQMC_elm : PLMN_Identity
-{
-       static constexpr const char* name() {return "PLMNListforQMC_elm";}
-       using parent_t = PLMN_Identity;
-
-};
-struct PLMNListforQMC : asn::sequenceof<PLMNListforQMC_elm>
-{
-       static constexpr const char* name() {return "PLMNListforQMC";}
-       using parent_t = asn::sequenceof<PLMNListforQMC_elm>;
-       using constraint_t = asn::constraints<false,asn::span<1,  maxnoofPLMNforQMC >>;
-
-};
-/*
-PLMNAreaBasedQMC-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct PLMNAreaBasedQMC_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-PLMNAreaBasedQMC ::= SEQUENCE {
-       plmnListforQMC          PLMNListforQMC,
-       iE-Extensions           ProtocolExtensionContainer { {PLMNAreaBasedQMC-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct PLMNAreaBasedQMC : asn::sequence<2, 0, true, 1>
-{
-       static constexpr const char* name() {return "PLMNAreaBasedQMC";}
-       using parent_t = asn::sequence<2, 0, true, 1>;
-       struct plmnListforQMC_t : PLMNListforQMC
-       {
-               static constexpr const char* name() {return "plmnListforQMC_t";}
-               using parent_t = PLMNListforQMC;
-
-       };
-       plmnListforQMC_t& ref_plmnListforQMC() {return plmnListforQMC;}
-       plmnListforQMC_t const& ref_plmnListforQMC() const {return plmnListforQMC;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<PLMNAreaBasedQMC_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<PLMNAreaBasedQMC_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(plmnListforQMC);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(plmnListforQMC);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               plmnListforQMC.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       plmnListforQMC_t        plmnListforQMC;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-AreaScopeOfQMC ::= CHOICE {
-       cellBased                                       CellBasedQMC,
-       tABased                                         TABasedQMC,
-       tAIBased                                        TAIBasedQMC,
-       pLMNAreaBased                           PLMNAreaBasedQMC,
-       ...
-}
-*/
-
-struct AreaScopeOfQMC : asn::choice<4, 0, true>
-{
-       static constexpr const char* name() {return "AreaScopeOfQMC";}
-       using parent_t = asn::choice<4, 0, true>;
-       index_type get_index() const {return index;}
-       bool is_unknown() const {return index == 5;}
-       void set_unknown() { set_index(5);  }
-       ~AreaScopeOfQMC() {clear();}
-       struct cellBased_t : CellBasedQMC
-       {
-               static constexpr const char* name() {return "cellBased_t";}
-               using parent_t = CellBasedQMC;
-
-       };
-       struct tABased_t : TABasedQMC
-       {
-               static constexpr const char* name() {return "tABased_t";}
-               using parent_t = TABasedQMC;
-
-       };
-       struct tAIBased_t : TAIBasedQMC
-       {
-               static constexpr const char* name() {return "tAIBased_t";}
-               using parent_t = TAIBasedQMC;
-
-       };
-       struct pLMNAreaBased_t : PLMNAreaBasedQMC
-       {
-               static constexpr const char* name() {return "pLMNAreaBased_t";}
-               using parent_t = PLMNAreaBasedQMC;
-
-       };
-       void clear()
-       {
-               switch(get_index())
-               {
-               case 1: var.destroy<cellBased_t>(); break;
-               case 2: var.destroy<tABased_t>(); break;
-               case 3: var.destroy<tAIBased_t>(); break;
-               case 4: var.destroy<pLMNAreaBased_t>(); break;
-               }
-               index = 0;
-               base::clear();
-       }
-       template<typename V> bool decode(size_t idx, V& v)
-       {
-               clear();
-               switch(idx)
-               {
-               case 1: set_index(1); return v(var.build<cellBased_t>());
-               case 2: set_index(2); return v(var.build<tABased_t>());
-               case 3: set_index(3); return v(var.build<tAIBased_t>());
-               case 4: set_index(4); return v(var.build<pLMNAreaBased_t>());
-               }
-               return false;
-
-       }
-       template<typename V> bool encode(V& v) const
-       {
-               switch(get_index())
-               {
-               case 1: return v(var.as<cellBased_t>());
-               case 2: return v(var.as<tABased_t>());
-               case 3: return v(var.as<tAIBased_t>());
-               case 4: return v(var.as<pLMNAreaBased_t>());
-               }
-               return false;
-       }
-       template<typename V> static inline void enumerate(V& v)
-       {
-               v.template operator()<cellBased_t>(1);
-               v.template operator()<tABased_t>(2);
-               v.template operator()<tAIBased_t>(3);
-               v.template operator()<pLMNAreaBased_t>(4);
-
-       }
-       cellBased_t& select_cellBased() { if(get_index() != 1) { clear(); set_index(1); return var.build<cellBased_t>();} return var.as<cellBased_t>();}
-       cellBased_t const* get_cellBased() const { if(get_index() == 1) { return &var.as<cellBased_t>();} return nullptr; }
-       tABased_t& select_tABased() { if(get_index() != 2) { clear(); set_index(2); return var.build<tABased_t>();} return var.as<tABased_t>();}
-       tABased_t const* get_tABased() const { if(get_index() == 2) { return &var.as<tABased_t>();} return nullptr; }
-       tAIBased_t& select_tAIBased() { if(get_index() != 3) { clear(); set_index(3); return var.build<tAIBased_t>();} return var.as<tAIBased_t>();}
-       tAIBased_t const* get_tAIBased() const { if(get_index() == 3) { return &var.as<tAIBased_t>();} return nullptr; }
-       pLMNAreaBased_t& select_pLMNAreaBased() { if(get_index() != 4) { clear(); set_index(4); return var.build<pLMNAreaBased_t>();} return var.as<pLMNAreaBased_t>();}
-       pLMNAreaBased_t const* get_pLMNAreaBased() const { if(get_index() == 4) { return &var.as<pLMNAreaBased_t>();} return nullptr; }
-       private:
-       void set_index(index_type i) {index = i; base::set();}
-       union union_type
-       {
-               char dummy1[sizeof(cellBased_t)];
-               char dummy2[sizeof(tABased_t)];
-               char dummy3[sizeof(tAIBased_t)];
-               char dummy4[sizeof(pLMNAreaBased_t)];
-
-       };
-       asn::variant<sizeof(union_type)>        var;
-       index_type      index {0};
-};
-/*
-FreqBandIndicator ::= INTEGER (1..256, ...)
-*/
-
-struct FreqBandIndicator : asn::integer<>
-{
-       using constraint_t = asn::constraints<true,asn::span<1, 256>>;
-       static constexpr const char* name() {return "FreqBandIndicator";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-BandInfo-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct BandInfo_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-BandInfo       ::= SEQUENCE {
-       freqBandIndicator               FreqBandIndicator,
-       iE-Extensions                   ProtocolExtensionContainer { {BandInfo-ExtIEs} }        OPTIONAL,
-       ...
-}
-*/
-
-struct BandInfo : asn::sequence<2, 0, true, 1>
-{
-       static constexpr const char* name() {return "BandInfo";}
-       using parent_t = asn::sequence<2, 0, true, 1>;
-       struct freqBandIndicator_t : FreqBandIndicator
-       {
-               static constexpr const char* name() {return "freqBandIndicator_t";}
-               using parent_t = FreqBandIndicator;
-
-       };
-       freqBandIndicator_t& ref_freqBandIndicator() {return freqBandIndicator;}
-       freqBandIndicator_t const& ref_freqBandIndicator() const {return freqBandIndicator;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<BandInfo_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<BandInfo_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(freqBandIndicator);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(freqBandIndicator);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               freqBandIndicator.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       freqBandIndicator_t     freqBandIndicator;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-BandwidthReducedSI::= ENUMERATED {
-       scheduled,
-       ...
-}
-*/
-
-struct BandwidthReducedSI : asn::enumerated<1, 0, true>
-{
-       static constexpr const char* name() {return "BandwidthReducedSI";}
-       using parent_t = asn::enumerated<1, 0, true>;
-       typedef enum {
-               scheduled
-       } index_t;
-
-};
-
-/*
-BearerType ::= ENUMERATED {
-       non-IP,
-       ...
-}
-*/
-
-struct BearerType : asn::enumerated<1, 0, true>
-{
-       static constexpr const char* name() {return "BearerType";}
-       using parent_t = asn::enumerated<1, 0, true>;
-       typedef enum {
-               non_IP
-       } index_t;
-
-};
-
-/*
-BenefitMetric ::= INTEGER (-101..100, ...)
-*/
-
-struct BenefitMetric : asn::integer<>
-{
-       using constraint_t = asn::constraints<true,asn::span<-101, 100>>;
-       static constexpr const char* name() {return "BenefitMetric";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-BitRate ::= INTEGER (0..10000000000)
-*/
-
-struct BitRate : asn::integer<>
-{
-       using constraint_t = asn::constraints<false,asn::span<0, 10000000000>>;
-       static constexpr const char* name() {return "BitRate";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-BluetoothMeasConfig::= ENUMERATED {setup,...}
-*/
-
-struct BluetoothMeasConfig : asn::enumerated<1, 0, true>
-{
-       static constexpr const char* name() {return "BluetoothMeasConfig";}
-       using parent_t = asn::enumerated<1, 0, true>;
-       typedef enum {
-               setup
-       } index_t;
-
-};
-
-/*
-BluetoothName ::= OCTET STRING (SIZE (1..248))
-*/
-
-struct BluetoothName : asn::ostring<>
-{
-       using constraint_t = asn::constraints<false,asn::span<1, 248>>;
-       static constexpr const char* name() {return "BluetoothName";}
-       using parent_t = asn::ostring<>;
-
-};
-
-/*
-BluetoothMeasConfigNameList ::= SEQUENCE (SIZE(1..maxnoofBluetoothName)) OF BluetoothName
-*/
-
-struct BluetoothMeasConfigNameList_elm : BluetoothName
-{
-       static constexpr const char* name() {return "BluetoothMeasConfigNameList_elm";}
-       using parent_t = BluetoothName;
-
-};
-struct BluetoothMeasConfigNameList : asn::sequenceof<BluetoothMeasConfigNameList_elm>
-{
-       static constexpr const char* name() {return "BluetoothMeasConfigNameList";}
-       using parent_t = asn::sequenceof<BluetoothMeasConfigNameList_elm>;
-       using constraint_t = asn::constraints<false,asn::span<1,  maxnoofBluetoothName >>;
-
-};
-/*
-BluetoothMeasurementConfiguration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct BluetoothMeasurementConfiguration_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-BluetoothMeasurementConfiguration ::= SEQUENCE {
-       bluetoothMeasConfig                             BluetoothMeasConfig,
-       bluetoothMeasConfigNameList             BluetoothMeasConfigNameList                     OPTIONAL,
-       bt-rssi                                                 ENUMERATED {true, ...}                          OPTIONAL,
-       iE-Extensions           ProtocolExtensionContainer { {BluetoothMeasurementConfiguration-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct BluetoothMeasurementConfiguration : asn::sequence<4, 0, true, 3>
-{
-       static constexpr const char* name() {return "BluetoothMeasurementConfiguration";}
-       using parent_t = asn::sequence<4, 0, true, 3>;
-       struct bluetoothMeasConfig_t : BluetoothMeasConfig
-       {
-               static constexpr const char* name() {return "bluetoothMeasConfig_t";}
-               using parent_t = BluetoothMeasConfig;
-
-       };
-       bluetoothMeasConfig_t& ref_bluetoothMeasConfig() {return bluetoothMeasConfig;}
-       bluetoothMeasConfig_t const& ref_bluetoothMeasConfig() const {return bluetoothMeasConfig;}
-       struct bluetoothMeasConfigNameList_t : BluetoothMeasConfigNameList
-       {
-               static constexpr const char* name() {return "bluetoothMeasConfigNameList_t";}
-               using parent_t = BluetoothMeasConfigNameList;
-               static constexpr bool optional = true;
-
-       };
-       bluetoothMeasConfigNameList_t& set_bluetoothMeasConfigNameList() { bluetoothMeasConfigNameList.setpresent(true); return bluetoothMeasConfigNameList;}
-       bluetoothMeasConfigNameList_t const* get_bluetoothMeasConfigNameList() const {return bluetoothMeasConfigNameList.is_valid() ? &bluetoothMeasConfigNameList : nullptr;}
-       struct bt_rssi_t : asn::enumerated<1, 0, true>
-       {
-               static constexpr const char* name() {return "bt_rssi_t";}
-               using parent_t = asn::enumerated<1, 0, true>;
-               static constexpr bool optional = true;
-               typedef enum {
-                       True
-               } index_t;
-
-       };
-
-       bt_rssi_t& set_bt_rssi() { bt_rssi.setpresent(true); return bt_rssi;}
-       bt_rssi_t const* get_bt_rssi() const {return bt_rssi.is_valid() ? &bt_rssi : nullptr;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<BluetoothMeasurementConfiguration_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<BluetoothMeasurementConfiguration_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(bluetoothMeasConfig);
-               v(bluetoothMeasConfigNameList);
-               v(bt_rssi);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(bluetoothMeasConfig);
-               v(bluetoothMeasConfigNameList);
-               v(bt_rssi);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               bluetoothMeasConfig.clear();
-               bluetoothMeasConfigNameList.clear();
-               bt_rssi.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       bluetoothMeasConfig_t   bluetoothMeasConfig;
-       bluetoothMeasConfigNameList_t   bluetoothMeasConfigNameList;
-       bt_rssi_t       bt_rssi;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-BroadcastPLMNs-Item ::= SEQUENCE (SIZE(1..maxnoofBPLMNs)) OF PLMN-Identity
-*/
-
-struct BroadcastPLMNs_Item_elm : PLMN_Identity
-{
-       static constexpr const char* name() {return "BroadcastPLMNs_Item_elm";}
-       using parent_t = PLMN_Identity;
-
-};
-struct BroadcastPLMNs_Item : asn::sequenceof<BroadcastPLMNs_Item_elm>
-{
-       static constexpr const char* name() {return "BroadcastPLMNs-Item";}
-       using parent_t = asn::sequenceof<BroadcastPLMNs_Item_elm>;
-       using constraint_t = asn::constraints<false,asn::span<1,  maxnoofBPLMNs >>;
-
-};
-/*
-CNTypeRestrictionsItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct CNTypeRestrictionsItem_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-CNTypeRestrictionsItem ::= SEQUENCE {
-       plmn-Id                         PLMN-Identity,
-       cn-type                         ENUMERATED {fiveGC-forbidden, ...},
-       iE-Extensions           ProtocolExtensionContainer { {CNTypeRestrictionsItem-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct CNTypeRestrictionsItem : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "CNTypeRestrictionsItem";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct plmn_Id_t : PLMN_Identity
-       {
-               static constexpr const char* name() {return "plmn_Id_t";}
-               using parent_t = PLMN_Identity;
-
-       };
-       plmn_Id_t& ref_plmn_Id() {return plmn_Id;}
-       plmn_Id_t const& ref_plmn_Id() const {return plmn_Id;}
-       struct cn_type_t : asn::enumerated<1, 0, true>
-       {
-               static constexpr const char* name() {return "cn_type_t";}
-               using parent_t = asn::enumerated<1, 0, true>;
-               typedef enum {
-                       fiveGC_forbidden
-               } index_t;
-
-       };
-
-       cn_type_t& ref_cn_type() {return cn_type;}
-       cn_type_t const& ref_cn_type() const {return cn_type;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<CNTypeRestrictionsItem_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<CNTypeRestrictionsItem_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(plmn_Id);
-               v(cn_type);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(plmn_Id);
-               v(cn_type);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               plmn_Id.clear();
-               cn_type.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       plmn_Id_t       plmn_Id;
-       cn_type_t       cn_type;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-CNTypeRestrictions ::= SEQUENCE (SIZE(1.. maxnoofEPLMNsPlusOne)) OF CNTypeRestrictionsItem
-*/
-
-struct CNTypeRestrictions_elm : CNTypeRestrictionsItem
-{
-       static constexpr const char* name() {return "CNTypeRestrictions_elm";}
-       using parent_t = CNTypeRestrictionsItem;
-
-};
-struct CNTypeRestrictions : asn::sequenceof<CNTypeRestrictions_elm>
-{
-       static constexpr const char* name() {return "CNTypeRestrictions";}
-       using parent_t = asn::sequenceof<CNTypeRestrictions_elm>;
-       using constraint_t = asn::constraints<false,asn::span<1,  maxnoofEPLMNsPlusOne >>;
-
-};
-/*
-PDCP-SNExtended ::= INTEGER (0..32767)
-*/
-
-struct PDCP_SNExtended : asn::integer<>
-{
-       using constraint_t = asn::constraints<false,asn::span<0, 32767>>;
-       static constexpr const char* name() {return "PDCP-SNExtended";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-HFNModified ::= INTEGER (0..131071)
-*/
-
-struct HFNModified : asn::integer<>
-{
-       using constraint_t = asn::constraints<false,asn::span<0, 131071>>;
-       static constexpr const char* name() {return "HFNModified";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-COUNTValueExtended-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct COUNTValueExtended_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-COUNTValueExtended ::= SEQUENCE {
-       pDCP-SNExtended                 PDCP-SNExtended,
-       hFNModified                             HFNModified,
-       iE-Extensions                   ProtocolExtensionContainer { {COUNTValueExtended-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct COUNTValueExtended : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "COUNTValueExtended";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct pDCP_SNExtended_t : PDCP_SNExtended
-       {
-               static constexpr const char* name() {return "pDCP_SNExtended_t";}
-               using parent_t = PDCP_SNExtended;
-
-       };
-       pDCP_SNExtended_t& ref_pDCP_SNExtended() {return pDCP_SNExtended;}
-       pDCP_SNExtended_t const& ref_pDCP_SNExtended() const {return pDCP_SNExtended;}
-       struct hFNModified_t : HFNModified
-       {
-               static constexpr const char* name() {return "hFNModified_t";}
-               using parent_t = HFNModified;
-
-       };
-       hFNModified_t& ref_hFNModified() {return hFNModified;}
-       hFNModified_t const& ref_hFNModified() const {return hFNModified;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<COUNTValueExtended_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<COUNTValueExtended_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(pDCP_SNExtended);
-               v(hFNModified);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(pDCP_SNExtended);
-               v(hFNModified);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               pDCP_SNExtended.clear();
-               hFNModified.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       pDCP_SNExtended_t       pDCP_SNExtended;
-       hFNModified_t   hFNModified;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-PDCP-SN ::= INTEGER (0..4095)
-*/
-
-struct PDCP_SN : asn::integer<>
-{
-       using constraint_t = asn::constraints<false,asn::span<0, 4095>>;
-       static constexpr const char* name() {return "PDCP-SN";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-HFN ::= INTEGER (0..1048575)
-*/
-
-struct HFN : asn::integer<>
-{
-       using constraint_t = asn::constraints<false,asn::span<0, 1048575>>;
-       static constexpr const char* name() {return "HFN";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-COUNTvalue-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct COUNTvalue_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-COUNTvalue ::= SEQUENCE {
-       pDCP-SN                                 PDCP-SN,
-       hFN                                             HFN,
-       iE-Extensions                   ProtocolExtensionContainer { {COUNTvalue-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct COUNTvalue : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "COUNTvalue";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct pDCP_SN_t : PDCP_SN
-       {
-               static constexpr const char* name() {return "pDCP_SN_t";}
-               using parent_t = PDCP_SN;
-
-       };
-       pDCP_SN_t& ref_pDCP_SN() {return pDCP_SN;}
-       pDCP_SN_t const& ref_pDCP_SN() const {return pDCP_SN;}
-       struct hFN_t : HFN
-       {
-               static constexpr const char* name() {return "hFN_t";}
-               using parent_t = HFN;
-
-       };
-       hFN_t& ref_hFN() {return hFN;}
-       hFN_t const& ref_hFN() const {return hFN;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<COUNTvalue_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<COUNTvalue_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(pDCP_SN);
-               v(hFN);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(pDCP_SN);
-               v(hFN);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               pDCP_SN.clear();
-               hFN.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       pDCP_SN_t       pDCP_SN;
-       hFN_t   hFN;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-PDCP-SNlength18 ::= INTEGER (0..262143)
-*/
-
-struct PDCP_SNlength18 : asn::integer<>
-{
-       using constraint_t = asn::constraints<false,asn::span<0, 262143>>;
-       static constexpr const char* name() {return "PDCP-SNlength18";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-HFNforPDCP-SNlength18 ::= INTEGER (0..16383)
-*/
-
-struct HFNforPDCP_SNlength18 : asn::integer<>
-{
-       using constraint_t = asn::constraints<false,asn::span<0, 16383>>;
-       static constexpr const char* name() {return "HFNforPDCP-SNlength18";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-COUNTvaluePDCP-SNlength18-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct COUNTvaluePDCP_SNlength18_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-COUNTvaluePDCP-SNlength18 ::= SEQUENCE {
-       pDCP-SNlength18                 PDCP-SNlength18,
-       hFNforPDCP-SNlength18   HFNforPDCP-SNlength18,
-       iE-Extensions                   ProtocolExtensionContainer { {COUNTvaluePDCP-SNlength18-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct COUNTvaluePDCP_SNlength18 : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "COUNTvaluePDCP-SNlength18";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct pDCP_SNlength18_t : PDCP_SNlength18
-       {
-               static constexpr const char* name() {return "pDCP_SNlength18_t";}
-               using parent_t = PDCP_SNlength18;
-
-       };
-       pDCP_SNlength18_t& ref_pDCP_SNlength18() {return pDCP_SNlength18;}
-       pDCP_SNlength18_t const& ref_pDCP_SNlength18() const {return pDCP_SNlength18;}
-       struct hFNforPDCP_SNlength18_t : HFNforPDCP_SNlength18
-       {
-               static constexpr const char* name() {return "hFNforPDCP_SNlength18_t";}
-               using parent_t = HFNforPDCP_SNlength18;
-
-       };
-       hFNforPDCP_SNlength18_t& ref_hFNforPDCP_SNlength18() {return hFNforPDCP_SNlength18;}
-       hFNforPDCP_SNlength18_t const& ref_hFNforPDCP_SNlength18() const {return hFNforPDCP_SNlength18;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<COUNTvaluePDCP_SNlength18_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<COUNTvaluePDCP_SNlength18_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(pDCP_SNlength18);
-               v(hFNforPDCP_SNlength18);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(pDCP_SNlength18);
-               v(hFNforPDCP_SNlength18);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               pDCP_SNlength18.clear();
-               hFNforPDCP_SNlength18.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       pDCP_SNlength18_t       pDCP_SNlength18;
-       hFNforPDCP_SNlength18_t hFNforPDCP_SNlength18;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-CRNTI ::= BIT STRING (SIZE (16))
-*/
-
-struct CRNTI : asn::bstring<>
-{
-       using constraint_t = asn::constraints<false,asn::one<16>>;
-       static constexpr const char* name() {return "CRNTI";}
-       using parent_t = asn::bstring<>;
-
-};
-
-/*
-CSG-Id ::= BIT STRING (SIZE (27))
-*/
-
-struct CSG_Id : asn::bstring<>
-{
-       using constraint_t = asn::constraints<false,asn::one<27>>;
-       static constexpr const char* name() {return "CSG-Id";}
-       using parent_t = asn::bstring<>;
-
-};
-
-/*
-CSGMembershipStatus ::= ENUMERATED {
-       member,
-       not-member
-}
-*/
-
-struct CSGMembershipStatus : asn::enumerated<2, 0, false>
-{
-       static constexpr const char* name() {return "CSGMembershipStatus";}
-       using parent_t = asn::enumerated<2, 0, false>;
-       typedef enum {
-               member
-               ,not_member
-       } index_t;
-
-};
-
-/*
-UEID ::= BIT STRING (SIZE (16))
-*/
-
-struct UEID : asn::bstring<>
-{
-       using constraint_t = asn::constraints<false,asn::one<16>>;
-       static constexpr const char* name() {return "UEID";}
-       using parent_t = asn::bstring<>;
-
-};
-
-/*
-WidebandCQICodeword1::= CHOICE {
-       four-bitCQI                                                             INTEGER (0..15, ...),
-       three-bitSpatialDifferentialCQI                 INTEGER (0..7, ...),
-       ...
-}
-*/
-
-struct WidebandCQICodeword1 : asn::choice<2, 0, true>
-{
-       static constexpr const char* name() {return "WidebandCQICodeword1";}
-       using parent_t = asn::choice<2, 0, true>;
-       index_type get_index() const {return index;}
-       bool is_unknown() const {return index == 3;}
-       void set_unknown() { set_index(3);  }
-       ~WidebandCQICodeword1() {clear();}
-       struct four_bitCQI_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<true,asn::span<0, 15>>;
-               static constexpr const char* name() {return "four_bitCQI_t";}
-               using parent_t = asn::integer<>;
-
-       };
-
-       struct three_bitSpatialDifferentialCQI_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<true,asn::span<0, 7>>;
-               static constexpr const char* name() {return "three_bitSpatialDifferentialCQI_t";}
-               using parent_t = asn::integer<>;
-
-       };
-
-       void clear()
-       {
-               switch(get_index())
-               {
-               case 1: var.destroy<four_bitCQI_t>(); break;
-               case 2: var.destroy<three_bitSpatialDifferentialCQI_t>(); break;
-               }
-               index = 0;
-               base::clear();
-       }
-       template<typename V> bool decode(size_t idx, V& v)
-       {
-               clear();
-               switch(idx)
-               {
-               case 1: set_index(1); return v(var.build<four_bitCQI_t>());
-               case 2: set_index(2); return v(var.build<three_bitSpatialDifferentialCQI_t>());
-               }
-               return false;
-
-       }
-       template<typename V> bool encode(V& v) const
-       {
-               switch(get_index())
-               {
-               case 1: return v(var.as<four_bitCQI_t>());
-               case 2: return v(var.as<three_bitSpatialDifferentialCQI_t>());
-               }
-               return false;
-       }
-       template<typename V> static inline void enumerate(V& v)
-       {
-               v.template operator()<four_bitCQI_t>(1);
-               v.template operator()<three_bitSpatialDifferentialCQI_t>(2);
-
-       }
-       four_bitCQI_t& select_four_bitCQI() { if(get_index() != 1) { clear(); set_index(1); return var.build<four_bitCQI_t>();} return var.as<four_bitCQI_t>();}
-       four_bitCQI_t const* get_four_bitCQI() const { if(get_index() == 1) { return &var.as<four_bitCQI_t>();} return nullptr; }
-       three_bitSpatialDifferentialCQI_t& select_three_bitSpatialDifferentialCQI() { if(get_index() != 2) { clear(); set_index(2); return var.build<three_bitSpatialDifferentialCQI_t>();} return var.as<three_bitSpatialDifferentialCQI_t>();}
-       three_bitSpatialDifferentialCQI_t const* get_three_bitSpatialDifferentialCQI() const { if(get_index() == 2) { return &var.as<three_bitSpatialDifferentialCQI_t>();} return nullptr; }
-       private:
-       void set_index(index_type i) {index = i; base::set();}
-       union union_type
-       {
-               char dummy1[sizeof(four_bitCQI_t)];
-               char dummy2[sizeof(three_bitSpatialDifferentialCQI_t)];
-
-       };
-       asn::variant<sizeof(union_type)>        var;
-       index_type      index {0};
-};
-/*
-WidebandCQI-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct WidebandCQI_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-WidebandCQI ::= SEQUENCE {
-       widebandCQICodeword0            INTEGER (0..15, ...),
-       widebandCQICodeword1            WidebandCQICodeword1            OPTIONAL,
-       iE-Extensions                           ProtocolExtensionContainer { {WidebandCQI-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct WidebandCQI : asn::sequence<3, 0, true, 2>
-{
-       static constexpr const char* name() {return "WidebandCQI";}
-       using parent_t = asn::sequence<3, 0, true, 2>;
-       struct widebandCQICodeword0_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<true,asn::span<0, 15>>;
-               static constexpr const char* name() {return "widebandCQICodeword0_t";}
-               using parent_t = asn::integer<>;
-
-       };
-
-       widebandCQICodeword0_t& ref_widebandCQICodeword0() {return widebandCQICodeword0;}
-       widebandCQICodeword0_t const& ref_widebandCQICodeword0() const {return widebandCQICodeword0;}
-       struct widebandCQICodeword1_t : WidebandCQICodeword1
-       {
-               static constexpr const char* name() {return "widebandCQICodeword1_t";}
-               using parent_t = WidebandCQICodeword1;
-               static constexpr bool optional = true;
-
-       };
-       widebandCQICodeword1_t& set_widebandCQICodeword1() { widebandCQICodeword1.setpresent(true); return widebandCQICodeword1;}
-       widebandCQICodeword1_t const* get_widebandCQICodeword1() const {return widebandCQICodeword1.is_valid() ? &widebandCQICodeword1 : nullptr;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<WidebandCQI_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<WidebandCQI_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(widebandCQICodeword0);
-               v(widebandCQICodeword1);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(widebandCQICodeword0);
-               v(widebandCQICodeword1);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               widebandCQICodeword0.clear();
-               widebandCQICodeword1.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       widebandCQICodeword0_t  widebandCQICodeword0;
-       widebandCQICodeword1_t  widebandCQICodeword1;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-SubbandSize ::= ENUMERATED {
-       size2,
-       size3,
-       size4,
-       size6,
-       size8,
-       ...
-}
-*/
-
-struct SubbandSize : asn::enumerated<5, 0, true>
-{
-       static constexpr const char* name() {return "SubbandSize";}
-       using parent_t = asn::enumerated<5, 0, true>;
-       typedef enum {
-               size2
-               ,size3
-               ,size4
-               ,size6
-               ,size8
-       } index_t;
-
-};
-
-/*
-SubbandCQICodeword0 ::= CHOICE {
-       four-bitCQI                                             INTEGER (0..15, ...),
-       two-bitSubbandDifferentialCQI   INTEGER (0..3, ...),
-       two-bitDifferentialCQI                  INTEGER (0..3, ...),
-       ...
-}
-*/
-
-struct SubbandCQICodeword0 : asn::choice<3, 0, true>
-{
-       static constexpr const char* name() {return "SubbandCQICodeword0";}
-       using parent_t = asn::choice<3, 0, true>;
-       index_type get_index() const {return index;}
-       bool is_unknown() const {return index == 4;}
-       void set_unknown() { set_index(4);  }
-       ~SubbandCQICodeword0() {clear();}
-       struct four_bitCQI_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<true,asn::span<0, 15>>;
-               static constexpr const char* name() {return "four_bitCQI_t";}
-               using parent_t = asn::integer<>;
-
-       };
-
-       struct two_bitSubbandDifferentialCQI_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<true,asn::span<0, 3>>;
-               static constexpr const char* name() {return "two_bitSubbandDifferentialCQI_t";}
-               using parent_t = asn::integer<>;
-
-       };
-
-       struct two_bitDifferentialCQI_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<true,asn::span<0, 3>>;
-               static constexpr const char* name() {return "two_bitDifferentialCQI_t";}
-               using parent_t = asn::integer<>;
-
-       };
-
-       void clear()
-       {
-               switch(get_index())
-               {
-               case 1: var.destroy<four_bitCQI_t>(); break;
-               case 2: var.destroy<two_bitSubbandDifferentialCQI_t>(); break;
-               case 3: var.destroy<two_bitDifferentialCQI_t>(); break;
-               }
-               index = 0;
-               base::clear();
-       }
-       template<typename V> bool decode(size_t idx, V& v)
-       {
-               clear();
-               switch(idx)
-               {
-               case 1: set_index(1); return v(var.build<four_bitCQI_t>());
-               case 2: set_index(2); return v(var.build<two_bitSubbandDifferentialCQI_t>());
-               case 3: set_index(3); return v(var.build<two_bitDifferentialCQI_t>());
-               }
-               return false;
-
-       }
-       template<typename V> bool encode(V& v) const
-       {
-               switch(get_index())
-               {
-               case 1: return v(var.as<four_bitCQI_t>());
-               case 2: return v(var.as<two_bitSubbandDifferentialCQI_t>());
-               case 3: return v(var.as<two_bitDifferentialCQI_t>());
-               }
-               return false;
-       }
-       template<typename V> static inline void enumerate(V& v)
-       {
-               v.template operator()<four_bitCQI_t>(1);
-               v.template operator()<two_bitSubbandDifferentialCQI_t>(2);
-               v.template operator()<two_bitDifferentialCQI_t>(3);
-
-       }
-       four_bitCQI_t& select_four_bitCQI() { if(get_index() != 1) { clear(); set_index(1); return var.build<four_bitCQI_t>();} return var.as<four_bitCQI_t>();}
-       four_bitCQI_t const* get_four_bitCQI() const { if(get_index() == 1) { return &var.as<four_bitCQI_t>();} return nullptr; }
-       two_bitSubbandDifferentialCQI_t& select_two_bitSubbandDifferentialCQI() { if(get_index() != 2) { clear(); set_index(2); return var.build<two_bitSubbandDifferentialCQI_t>();} return var.as<two_bitSubbandDifferentialCQI_t>();}
-       two_bitSubbandDifferentialCQI_t const* get_two_bitSubbandDifferentialCQI() const { if(get_index() == 2) { return &var.as<two_bitSubbandDifferentialCQI_t>();} return nullptr; }
-       two_bitDifferentialCQI_t& select_two_bitDifferentialCQI() { if(get_index() != 3) { clear(); set_index(3); return var.build<two_bitDifferentialCQI_t>();} return var.as<two_bitDifferentialCQI_t>();}
-       two_bitDifferentialCQI_t const* get_two_bitDifferentialCQI() const { if(get_index() == 3) { return &var.as<two_bitDifferentialCQI_t>();} return nullptr; }
-       private:
-       void set_index(index_type i) {index = i; base::set();}
-       union union_type
-       {
-               char dummy1[sizeof(four_bitCQI_t)];
-               char dummy2[sizeof(two_bitSubbandDifferentialCQI_t)];
-               char dummy3[sizeof(two_bitDifferentialCQI_t)];
-
-       };
-       asn::variant<sizeof(union_type)>        var;
-       index_type      index {0};
-};
-/*
-SubbandCQICodeword1 ::= CHOICE {
-       four-bitCQI                                                     INTEGER (0..15, ...),
-       three-bitSpatialDifferentialCQI         INTEGER (0..7, ...),
-       two-bitSubbandDifferentialCQI           INTEGER (0..3, ...),
-       two-bitDifferentialCQI                          INTEGER (0..3, ...),
-       ...
-}
-*/
-
-struct SubbandCQICodeword1 : asn::choice<4, 0, true>
-{
-       static constexpr const char* name() {return "SubbandCQICodeword1";}
-       using parent_t = asn::choice<4, 0, true>;
-       index_type get_index() const {return index;}
-       bool is_unknown() const {return index == 5;}
-       void set_unknown() { set_index(5);  }
-       ~SubbandCQICodeword1() {clear();}
-       struct four_bitCQI_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<true,asn::span<0, 15>>;
-               static constexpr const char* name() {return "four_bitCQI_t";}
-               using parent_t = asn::integer<>;
-
-       };
-
-       struct three_bitSpatialDifferentialCQI_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<true,asn::span<0, 7>>;
-               static constexpr const char* name() {return "three_bitSpatialDifferentialCQI_t";}
-               using parent_t = asn::integer<>;
-
-       };
-
-       struct two_bitSubbandDifferentialCQI_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<true,asn::span<0, 3>>;
-               static constexpr const char* name() {return "two_bitSubbandDifferentialCQI_t";}
-               using parent_t = asn::integer<>;
-
-       };
-
-       struct two_bitDifferentialCQI_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<true,asn::span<0, 3>>;
-               static constexpr const char* name() {return "two_bitDifferentialCQI_t";}
-               using parent_t = asn::integer<>;
-
-       };
-
-       void clear()
-       {
-               switch(get_index())
-               {
-               case 1: var.destroy<four_bitCQI_t>(); break;
-               case 2: var.destroy<three_bitSpatialDifferentialCQI_t>(); break;
-               case 3: var.destroy<two_bitSubbandDifferentialCQI_t>(); break;
-               case 4: var.destroy<two_bitDifferentialCQI_t>(); break;
-               }
-               index = 0;
-               base::clear();
-       }
-       template<typename V> bool decode(size_t idx, V& v)
-       {
-               clear();
-               switch(idx)
-               {
-               case 1: set_index(1); return v(var.build<four_bitCQI_t>());
-               case 2: set_index(2); return v(var.build<three_bitSpatialDifferentialCQI_t>());
-               case 3: set_index(3); return v(var.build<two_bitSubbandDifferentialCQI_t>());
-               case 4: set_index(4); return v(var.build<two_bitDifferentialCQI_t>());
-               }
-               return false;
-
-       }
-       template<typename V> bool encode(V& v) const
-       {
-               switch(get_index())
-               {
-               case 1: return v(var.as<four_bitCQI_t>());
-               case 2: return v(var.as<three_bitSpatialDifferentialCQI_t>());
-               case 3: return v(var.as<two_bitSubbandDifferentialCQI_t>());
-               case 4: return v(var.as<two_bitDifferentialCQI_t>());
-               }
-               return false;
-       }
-       template<typename V> static inline void enumerate(V& v)
-       {
-               v.template operator()<four_bitCQI_t>(1);
-               v.template operator()<three_bitSpatialDifferentialCQI_t>(2);
-               v.template operator()<two_bitSubbandDifferentialCQI_t>(3);
-               v.template operator()<two_bitDifferentialCQI_t>(4);
-
-       }
-       four_bitCQI_t& select_four_bitCQI() { if(get_index() != 1) { clear(); set_index(1); return var.build<four_bitCQI_t>();} return var.as<four_bitCQI_t>();}
-       four_bitCQI_t const* get_four_bitCQI() const { if(get_index() == 1) { return &var.as<four_bitCQI_t>();} return nullptr; }
-       three_bitSpatialDifferentialCQI_t& select_three_bitSpatialDifferentialCQI() { if(get_index() != 2) { clear(); set_index(2); return var.build<three_bitSpatialDifferentialCQI_t>();} return var.as<three_bitSpatialDifferentialCQI_t>();}
-       three_bitSpatialDifferentialCQI_t const* get_three_bitSpatialDifferentialCQI() const { if(get_index() == 2) { return &var.as<three_bitSpatialDifferentialCQI_t>();} return nullptr; }
-       two_bitSubbandDifferentialCQI_t& select_two_bitSubbandDifferentialCQI() { if(get_index() != 3) { clear(); set_index(3); return var.build<two_bitSubbandDifferentialCQI_t>();} return var.as<two_bitSubbandDifferentialCQI_t>();}
-       two_bitSubbandDifferentialCQI_t const* get_two_bitSubbandDifferentialCQI() const { if(get_index() == 3) { return &var.as<two_bitSubbandDifferentialCQI_t>();} return nullptr; }
-       two_bitDifferentialCQI_t& select_two_bitDifferentialCQI() { if(get_index() != 4) { clear(); set_index(4); return var.build<two_bitDifferentialCQI_t>();} return var.as<two_bitDifferentialCQI_t>();}
-       two_bitDifferentialCQI_t const* get_two_bitDifferentialCQI() const { if(get_index() == 4) { return &var.as<two_bitDifferentialCQI_t>();} return nullptr; }
-       private:
-       void set_index(index_type i) {index = i; base::set();}
-       union union_type
-       {
-               char dummy1[sizeof(four_bitCQI_t)];
-               char dummy2[sizeof(three_bitSpatialDifferentialCQI_t)];
-               char dummy3[sizeof(two_bitSubbandDifferentialCQI_t)];
-               char dummy4[sizeof(two_bitDifferentialCQI_t)];
-
-       };
-       asn::variant<sizeof(union_type)>        var;
-       index_type      index {0};
-};
-/*
-SubbandCQI-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct SubbandCQI_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-SubbandCQI ::= SEQUENCE {
-       subbandCQICodeword0                     SubbandCQICodeword0,
-       subbandCQICodeword1                     SubbandCQICodeword1             OPTIONAL,
-       iE-Extensions                           ProtocolExtensionContainer { {SubbandCQI-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct SubbandCQI : asn::sequence<3, 0, true, 2>
-{
-       static constexpr const char* name() {return "SubbandCQI";}
-       using parent_t = asn::sequence<3, 0, true, 2>;
-       struct subbandCQICodeword0_t : SubbandCQICodeword0
-       {
-               static constexpr const char* name() {return "subbandCQICodeword0_t";}
-               using parent_t = SubbandCQICodeword0;
-
-       };
-       subbandCQICodeword0_t& ref_subbandCQICodeword0() {return subbandCQICodeword0;}
-       subbandCQICodeword0_t const& ref_subbandCQICodeword0() const {return subbandCQICodeword0;}
-       struct subbandCQICodeword1_t : SubbandCQICodeword1
-       {
-               static constexpr const char* name() {return "subbandCQICodeword1_t";}
-               using parent_t = SubbandCQICodeword1;
-               static constexpr bool optional = true;
-
-       };
-       subbandCQICodeword1_t& set_subbandCQICodeword1() { subbandCQICodeword1.setpresent(true); return subbandCQICodeword1;}
-       subbandCQICodeword1_t const* get_subbandCQICodeword1() const {return subbandCQICodeword1.is_valid() ? &subbandCQICodeword1 : nullptr;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<SubbandCQI_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<SubbandCQI_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(subbandCQICodeword0);
-               v(subbandCQICodeword1);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(subbandCQICodeword0);
-               v(subbandCQICodeword1);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               subbandCQICodeword0.clear();
-               subbandCQICodeword1.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       subbandCQICodeword0_t   subbandCQICodeword0;
-       subbandCQICodeword1_t   subbandCQICodeword1;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-SubbandCQIItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct SubbandCQIItem_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-SubbandCQIItem ::= SEQUENCE {
-       subbandCQI                      SubbandCQI,
-       subbandIndex            INTEGER (0..27,...),
-       iE-Extensions           ProtocolExtensionContainer { {SubbandCQIItem-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct SubbandCQIItem : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "SubbandCQIItem";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct subbandCQI_t : SubbandCQI
-       {
-               static constexpr const char* name() {return "subbandCQI_t";}
-               using parent_t = SubbandCQI;
-
-       };
-       subbandCQI_t& ref_subbandCQI() {return subbandCQI;}
-       subbandCQI_t const& ref_subbandCQI() const {return subbandCQI;}
-       struct subbandIndex_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<true,asn::span<0, 27>>;
-               static constexpr const char* name() {return "subbandIndex_t";}
-               using parent_t = asn::integer<>;
-
-       };
-
-       subbandIndex_t& ref_subbandIndex() {return subbandIndex;}
-       subbandIndex_t const& ref_subbandIndex() const {return subbandIndex;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<SubbandCQIItem_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<SubbandCQIItem_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(subbandCQI);
-               v(subbandIndex);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(subbandCQI);
-               v(subbandIndex);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               subbandCQI.clear();
-               subbandIndex.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       subbandCQI_t    subbandCQI;
-       subbandIndex_t  subbandIndex;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-SubbandCQIList ::= SEQUENCE (SIZE(1.. maxSubband)) OF SubbandCQIItem
-*/
-
-struct SubbandCQIList_elm : SubbandCQIItem
-{
-       static constexpr const char* name() {return "SubbandCQIList_elm";}
-       using parent_t = SubbandCQIItem;
-
-};
-struct SubbandCQIList : asn::sequenceof<SubbandCQIList_elm>
-{
-       static constexpr const char* name() {return "SubbandCQIList";}
-       using parent_t = asn::sequenceof<SubbandCQIList_elm>;
-       using constraint_t = asn::constraints<false,asn::span<1,  maxSubband >>;
-
-};
-/*
-CSIReportPerCSIProcessItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct CSIReportPerCSIProcessItem_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-CSIReportPerCSIProcessItem ::= SEQUENCE (SIZE(1.. maxCSIReport)) OF
-       SEQUENCE {
-               rI                                                              INTEGER (1..8, ...),
-               widebandCQI                                             WidebandCQI,
-               subbandSize                                             SubbandSize,
-               subbandCQIList                                  SubbandCQIList  OPTIONAL,
-               iE-Extensions                                   ProtocolExtensionContainer { {CSIReportPerCSIProcessItem-ExtIEs} } OPTIONAL,
-               ...
-       }
-*/
-
-struct CSIReportPerCSIProcessItem_elm : asn::sequence<5, 0, true, 2>
-{
-       static constexpr const char* name() {return "CSIReportPerCSIProcessItem_elm";}
-       using parent_t = asn::sequence<5, 0, true, 2>;
-       struct rI_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<true,asn::span<1, 8>>;
-               static constexpr const char* name() {return "rI_t";}
-               using parent_t = asn::integer<>;
-
-       };
-
-       rI_t& ref_rI() {return rI;}
-       rI_t const& ref_rI() const {return rI;}
-       struct widebandCQI_t : WidebandCQI
-       {
-               static constexpr const char* name() {return "widebandCQI_t";}
-               using parent_t = WidebandCQI;
-
-       };
-       widebandCQI_t& ref_widebandCQI() {return widebandCQI;}
-       widebandCQI_t const& ref_widebandCQI() const {return widebandCQI;}
-       struct subbandSize_t : SubbandSize
-       {
-               static constexpr const char* name() {return "subbandSize_t";}
-               using parent_t = SubbandSize;
-
-       };
-       subbandSize_t& ref_subbandSize() {return subbandSize;}
-       subbandSize_t const& ref_subbandSize() const {return subbandSize;}
-       struct subbandCQIList_t : SubbandCQIList
-       {
-               static constexpr const char* name() {return "subbandCQIList_t";}
-               using parent_t = SubbandCQIList;
-               static constexpr bool optional = true;
-
-       };
-       subbandCQIList_t& set_subbandCQIList() { subbandCQIList.setpresent(true); return subbandCQIList;}
-       subbandCQIList_t const* get_subbandCQIList() const {return subbandCQIList.is_valid() ? &subbandCQIList : nullptr;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<CSIReportPerCSIProcessItem_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<CSIReportPerCSIProcessItem_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(rI);
-               v(widebandCQI);
-               v(subbandSize);
-               v(subbandCQIList);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(rI);
-               v(widebandCQI);
-               v(subbandSize);
-               v(subbandCQIList);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               rI.clear();
-               widebandCQI.clear();
-               subbandSize.clear();
-               subbandCQIList.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       rI_t    rI;
-       widebandCQI_t   widebandCQI;
-       subbandSize_t   subbandSize;
-       subbandCQIList_t        subbandCQIList;
-       iE_Extensions_t iE_Extensions;
-
-};
-struct CSIReportPerCSIProcessItem : asn::sequenceof<CSIReportPerCSIProcessItem_elm>
-{
-       static constexpr const char* name() {return "CSIReportPerCSIProcessItem";}
-       using parent_t = asn::sequenceof<CSIReportPerCSIProcessItem_elm>;
-       using constraint_t = asn::constraints<false,asn::span<1,  maxCSIReport >>;
-
-};
-/*
-CSIReportPerCSIProcess-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct CSIReportPerCSIProcess_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-CSIReportPerCSIProcess ::= SEQUENCE (SIZE(1.. maxCSIProcess)) OF
-       SEQUENCE {
-               cSIProcessConfigurationIndex    INTEGER (1..7, ...),
-               cSIReportPerCSIProcessItem              CSIReportPerCSIProcessItem,
-               iE-Extensions                                   ProtocolExtensionContainer { {CSIReportPerCSIProcess-ExtIEs} } OPTIONAL,
-               ...
-       }
-*/
-
-struct CSIReportPerCSIProcess_elm : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "CSIReportPerCSIProcess_elm";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct cSIProcessConfigurationIndex_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<true,asn::span<1, 7>>;
-               static constexpr const char* name() {return "cSIProcessConfigurationIndex_t";}
-               using parent_t = asn::integer<>;
-
-       };
-
-       cSIProcessConfigurationIndex_t& ref_cSIProcessConfigurationIndex() {return cSIProcessConfigurationIndex;}
-       cSIProcessConfigurationIndex_t const& ref_cSIProcessConfigurationIndex() const {return cSIProcessConfigurationIndex;}
-       struct cSIReportPerCSIProcessItem_t : CSIReportPerCSIProcessItem
-       {
-               static constexpr const char* name() {return "cSIReportPerCSIProcessItem_t";}
-               using parent_t = CSIReportPerCSIProcessItem;
-
-       };
-       cSIReportPerCSIProcessItem_t& ref_cSIReportPerCSIProcessItem() {return cSIReportPerCSIProcessItem;}
-       cSIReportPerCSIProcessItem_t const& ref_cSIReportPerCSIProcessItem() const {return cSIReportPerCSIProcessItem;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<CSIReportPerCSIProcess_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<CSIReportPerCSIProcess_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(cSIProcessConfigurationIndex);
-               v(cSIReportPerCSIProcessItem);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(cSIProcessConfigurationIndex);
-               v(cSIReportPerCSIProcessItem);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               cSIProcessConfigurationIndex.clear();
-               cSIReportPerCSIProcessItem.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       cSIProcessConfigurationIndex_t  cSIProcessConfigurationIndex;
-       cSIReportPerCSIProcessItem_t    cSIReportPerCSIProcessItem;
-       iE_Extensions_t iE_Extensions;
-
-};
-struct CSIReportPerCSIProcess : asn::sequenceof<CSIReportPerCSIProcess_elm>
-{
-       static constexpr const char* name() {return "CSIReportPerCSIProcess";}
-       using parent_t = asn::sequenceof<CSIReportPerCSIProcess_elm>;
-       using constraint_t = asn::constraints<false,asn::span<1,  maxCSIProcess >>;
-
-};
-/*
-CSIReportList-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct CSIReportList_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-CSIReportList ::= SEQUENCE (SIZE(1..maxUEReport)) OF
-       SEQUENCE {
-               uEID                                                    UEID,
-               cSIReportPerCSIProcess                  CSIReportPerCSIProcess,
-               iE-Extensions                                   ProtocolExtensionContainer { {CSIReportList-ExtIEs} } OPTIONAL,
-               ...
-       }
-*/
-
-struct CSIReportList_elm : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "CSIReportList_elm";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct uEID_t : UEID
-       {
-               static constexpr const char* name() {return "uEID_t";}
-               using parent_t = UEID;
-
-       };
-       uEID_t& ref_uEID() {return uEID;}
-       uEID_t const& ref_uEID() const {return uEID;}
-       struct cSIReportPerCSIProcess_t : CSIReportPerCSIProcess
-       {
-               static constexpr const char* name() {return "cSIReportPerCSIProcess_t";}
-               using parent_t = CSIReportPerCSIProcess;
-
-       };
-       cSIReportPerCSIProcess_t& ref_cSIReportPerCSIProcess() {return cSIReportPerCSIProcess;}
-       cSIReportPerCSIProcess_t const& ref_cSIReportPerCSIProcess() const {return cSIReportPerCSIProcess;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<CSIReportList_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<CSIReportList_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(uEID);
-               v(cSIReportPerCSIProcess);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(uEID);
-               v(cSIReportPerCSIProcess);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               uEID.clear();
-               cSIReportPerCSIProcess.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       uEID_t  uEID;
-       cSIReportPerCSIProcess_t        cSIReportPerCSIProcess;
-       iE_Extensions_t iE_Extensions;
-
-};
-struct CSIReportList : asn::sequenceof<CSIReportList_elm>
-{
-       static constexpr const char* name() {return "CSIReportList";}
-       using parent_t = asn::sequenceof<CSIReportList_elm>;
-       using constraint_t = asn::constraints<false,asn::span<1,  maxUEReport >>;
-
-};
-/*
-CapacityValue ::= INTEGER (0..100)
-*/
-
-struct CapacityValue : asn::integer<>
-{
-       using constraint_t = asn::constraints<false,asn::span<0, 100>>;
-       static constexpr const char* name() {return "CapacityValue";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-CauseRadioNetwork ::= ENUMERATED {
-       handover-desirable-for-radio-reasons,
-       time-critical-handover,
-       resource-optimisation-handover,
-       reduce-load-in-serving-cell,
-       partial-handover,
-       unknown-new-eNB-UE-X2AP-ID,
-       unknown-old-eNB-UE-X2AP-ID,
-       unknown-pair-of-UE-X2AP-ID,
-       ho-target-not-allowed,
-       tx2relocoverall-expiry,
-       trelocprep-expiry,
-       cell-not-available,
-       no-radio-resources-available-in-target-cell,
-       invalid-MME-GroupID,
-       unknown-MME-Code,
-       encryption-and-or-integrity-protection-algorithms-not-supported,
-       reportCharacteristicsEmpty,
-       noReportPeriodicity,
-       existingMeasurementID,
-       unknown-eNB-Measurement-ID,
-       measurement-temporarily-not-available,
-       unspecified,
-       ...,
-       load-balancing,
-       handover-optimisation,
-       value-out-of-allowed-range,
-       multiple-E-RAB-ID-instances,
-       switch-off-ongoing,
-       not-supported-QCI-value,
-       measurement-not-supported-for-the-object,
-       tDCoverall-expiry,
-       tDCprep-expiry,
-       action-desirable-for-radio-reasons,
-       reduce-load,
-       resource-optimisation,
-       time-critical-action,
-       target-not-allowed,
-       no-radio-resources-available,
-       invalid-QoS-combination,
-       encryption-algorithms-not-aupported,
-       procedure-cancelled,
-       rRM-purpose,
-       improve-user-bit-rate,
-       user-inactivity,
-       radio-connection-with-UE-lost,
-       failure-in-the-radio-interface-procedure,
-       bearer-option-not-supported,
-       mCG-Mobility,
-       sCG-Mobility,
-       count-reaches-max-value,
-       unknown-old-en-gNB-UE-X2AP-ID,
-       pDCP-Overload
-
-}
-*/
-
-struct CauseRadioNetwork : asn::enumerated<51, 29, true>
-{
-       static constexpr const char* name() {return "CauseRadioNetwork";}
-       using parent_t = asn::enumerated<51, 29, true>;
-       typedef enum {
-               handover_desirable_for_radio_reasons
-               ,time_critical_handover
-               ,resource_optimisation_handover
-               ,reduce_load_in_serving_cell
-               ,partial_handover
-               ,unknown_new_eNB_UE_X2AP_ID
-               ,unknown_old_eNB_UE_X2AP_ID
-               ,unknown_pair_of_UE_X2AP_ID
-               ,ho_target_not_allowed
-               ,tx2relocoverall_expiry
-               ,trelocprep_expiry
-               ,cell_not_available
-               ,no_radio_resources_available_in_target_cell
-               ,invalid_MME_GroupID
-               ,unknown_MME_Code
-               ,encryption_and_or_integrity_protection_algorithms_not_supported
-               ,reportCharacteristicsEmpty
-               ,noReportPeriodicity
-               ,existingMeasurementID
-               ,unknown_eNB_Measurement_ID
-               ,measurement_temporarily_not_available
-               ,unspecified
-               ,load_balancing
-               ,handover_optimisation
-               ,value_out_of_allowed_range
-               ,multiple_E_RAB_ID_instances
-               ,switch_off_ongoing
-               ,not_supported_QCI_value
-               ,measurement_not_supported_for_the_object
-               ,tDCoverall_expiry
-               ,tDCprep_expiry
-               ,action_desirable_for_radio_reasons
-               ,reduce_load
-               ,resource_optimisation
-               ,time_critical_action
-               ,target_not_allowed
-               ,no_radio_resources_available
-               ,invalid_QoS_combination
-               ,encryption_algorithms_not_aupported
-               ,procedure_cancelled
-               ,rRM_purpose
-               ,improve_user_bit_rate
-               ,user_inactivity
-               ,radio_connection_with_UE_lost
-               ,failure_in_the_radio_interface_procedure
-               ,bearer_option_not_supported
-               ,mCG_Mobility
-               ,sCG_Mobility
-               ,count_reaches_max_value
-               ,unknown_old_en_gNB_UE_X2AP_ID
-               ,pDCP_Overload
-       } index_t;
-
-};
-
-/*
-CauseTransport ::= ENUMERATED {
-       transport-resource-unavailable,
-       unspecified,
-       ...
-}
-*/
-
-struct CauseTransport : asn::enumerated<2, 0, true>
-{
-       static constexpr const char* name() {return "CauseTransport";}
-       using parent_t = asn::enumerated<2, 0, true>;
-       typedef enum {
-               transport_resource_unavailable
-               ,unspecified
-       } index_t;
-
-};
-
-/*
-CauseProtocol ::= ENUMERATED {
-       transfer-syntax-error,
-       abstract-syntax-error-reject,
-       abstract-syntax-error-ignore-and-notify,
-       message-not-compatible-with-receiver-state,
-       semantic-error,
-       unspecified,
-       abstract-syntax-error-falsely-constructed-message,
-       ...
-}
-*/
-
-struct CauseProtocol : asn::enumerated<7, 0, true>
-{
-       static constexpr const char* name() {return "CauseProtocol";}
-       using parent_t = asn::enumerated<7, 0, true>;
-       typedef enum {
-               transfer_syntax_error
-               ,abstract_syntax_error_reject
-               ,abstract_syntax_error_ignore_and_notify
-               ,message_not_compatible_with_receiver_state
-               ,semantic_error
-               ,unspecified
-               ,abstract_syntax_error_falsely_constructed_message
-       } index_t;
-
-};
-
-/*
-CauseMisc ::= ENUMERATED {
-       control-processing-overload,
-       hardware-failure,
-       om-intervention,
-       not-enough-user-plane-processing-resources,
-       unspecified,
-       ...
-}
-*/
-
-struct CauseMisc : asn::enumerated<5, 0, true>
-{
-       static constexpr const char* name() {return "CauseMisc";}
-       using parent_t = asn::enumerated<5, 0, true>;
-       typedef enum {
-               control_processing_overload
-               ,hardware_failure
-               ,om_intervention
-               ,not_enough_user_plane_processing_resources
-               ,unspecified
-       } index_t;
-
-};
-
-/*
-Cause ::= CHOICE {
-       radioNetwork            CauseRadioNetwork,
-       transport                       CauseTransport,
-       protocol                        CauseProtocol,
-       misc                            CauseMisc,
-       ...
-}
-*/
-
-struct Cause : asn::choice<4, 0, true>
-{
-       static constexpr const char* name() {return "Cause";}
-       using parent_t = asn::choice<4, 0, true>;
-       index_type get_index() const {return index;}
-       bool is_unknown() const {return index == 5;}
-       void set_unknown() { set_index(5);  }
-       ~Cause() {clear();}
-       struct radioNetwork_t : CauseRadioNetwork
-       {
-               static constexpr const char* name() {return "radioNetwork_t";}
-               using parent_t = CauseRadioNetwork;
-
-       };
-       struct transport_t : CauseTransport
-       {
-               static constexpr const char* name() {return "transport_t";}
-               using parent_t = CauseTransport;
-
-       };
-       struct protocol_t : CauseProtocol
-       {
-               static constexpr const char* name() {return "protocol_t";}
-               using parent_t = CauseProtocol;
-
-       };
-       struct misc_t : CauseMisc
-       {
-               static constexpr const char* name() {return "misc_t";}
-               using parent_t = CauseMisc;
-
-       };
-       void clear()
-       {
-               switch(get_index())
-               {
-               case 1: var.destroy<radioNetwork_t>(); break;
-               case 2: var.destroy<transport_t>(); break;
-               case 3: var.destroy<protocol_t>(); break;
-               case 4: var.destroy<misc_t>(); break;
-               }
-               index = 0;
-               base::clear();
-       }
-       template<typename V> bool decode(size_t idx, V& v)
-       {
-               clear();
-               switch(idx)
-               {
-               case 1: set_index(1); return v(var.build<radioNetwork_t>());
-               case 2: set_index(2); return v(var.build<transport_t>());
-               case 3: set_index(3); return v(var.build<protocol_t>());
-               case 4: set_index(4); return v(var.build<misc_t>());
-               }
-               return false;
-
-       }
-       template<typename V> bool encode(V& v) const
-       {
-               switch(get_index())
-               {
-               case 1: return v(var.as<radioNetwork_t>());
-               case 2: return v(var.as<transport_t>());
-               case 3: return v(var.as<protocol_t>());
-               case 4: return v(var.as<misc_t>());
-               }
-               return false;
-       }
-       template<typename V> static inline void enumerate(V& v)
-       {
-               v.template operator()<radioNetwork_t>(1);
-               v.template operator()<transport_t>(2);
-               v.template operator()<protocol_t>(3);
-               v.template operator()<misc_t>(4);
-
-       }
-       radioNetwork_t& select_radioNetwork() { if(get_index() != 1) { clear(); set_index(1); return var.build<radioNetwork_t>();} return var.as<radioNetwork_t>();}
-       radioNetwork_t const* get_radioNetwork() const { if(get_index() == 1) { return &var.as<radioNetwork_t>();} return nullptr; }
-       transport_t& select_transport() { if(get_index() != 2) { clear(); set_index(2); return var.build<transport_t>();} return var.as<transport_t>();}
-       transport_t const* get_transport() const { if(get_index() == 2) { return &var.as<transport_t>();} return nullptr; }
-       protocol_t& select_protocol() { if(get_index() != 3) { clear(); set_index(3); return var.build<protocol_t>();} return var.as<protocol_t>();}
-       protocol_t const* get_protocol() const { if(get_index() == 3) { return &var.as<protocol_t>();} return nullptr; }
-       misc_t& select_misc() { if(get_index() != 4) { clear(); set_index(4); return var.build<misc_t>();} return var.as<misc_t>();}
-       misc_t const* get_misc() const { if(get_index() == 4) { return &var.as<misc_t>();} return nullptr; }
-       private:
-       void set_index(index_type i) {index = i; base::set();}
-       union union_type
-       {
-               char dummy1[sizeof(radioNetwork_t)];
-               char dummy2[sizeof(transport_t)];
-               char dummy3[sizeof(protocol_t)];
-               char dummy4[sizeof(misc_t)];
-
-       };
-       asn::variant<sizeof(union_type)>        var;
-       index_type      index {0};
-};
-/*
-Cell-Size ::= ENUMERATED {verysmall, small, medium, large, ... }
-*/
-
-struct Cell_Size : asn::enumerated<4, 0, true>
-{
-       static constexpr const char* name() {return "Cell-Size";}
-       using parent_t = asn::enumerated<4, 0, true>;
-       typedef enum {
-               verysmall
-               ,small
-               ,medium
-               ,large
-       } index_t;
-
-};
-
-/*
-CellCapacityClassValue ::= INTEGER (1..100, ...)
-*/
-
-struct CellCapacityClassValue : asn::integer<>
-{
-       using constraint_t = asn::constraints<true,asn::span<1, 100>>;
-       static constexpr const char* name() {return "CellCapacityClassValue";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-CellDeploymentStatusIndicator ::= ENUMERATED {pre-change-notification, ...}
-*/
-
-struct CellDeploymentStatusIndicator : asn::enumerated<1, 0, true>
-{
-       static constexpr const char* name() {return "CellDeploymentStatusIndicator";}
-       using parent_t = asn::enumerated<1, 0, true>;
-       typedef enum {
-               pre_change_notification
-       } index_t;
-
-};
-
-/*
-ReplacingCellsList-Item ::= SEQUENCE {
-       eCGI                    ECGI,
-       ...
-}
-*/
-
-struct ReplacingCellsList_Item : asn::sequence<1, 0, true, 0>
-{
-       static constexpr const char* name() {return "ReplacingCellsList-Item";}
-       using parent_t = asn::sequence<1, 0, true, 0>;
-       struct eCGI_t : ECGI
-       {
-               static constexpr const char* name() {return "eCGI_t";}
-               using parent_t = ECGI;
-
-       };
-       eCGI_t& ref_eCGI() {return eCGI;}
-       eCGI_t const& ref_eCGI() const {return eCGI;}
-       template<typename V> void decode(V& v)
-       {
-               v(eCGI);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(eCGI);
-
-       };
-       void clear()
-       {
-               eCGI.clear();
-
-       };
-       private:
-       eCGI_t  eCGI;
-
-};
-/*
-ReplacingCellsList ::= SEQUENCE (SIZE(0.. maxCellineNB)) OF ReplacingCellsList-Item
-*/
-
-struct ReplacingCellsList_elm : ReplacingCellsList_Item
-{
-       static constexpr const char* name() {return "ReplacingCellsList_elm";}
-       using parent_t = ReplacingCellsList_Item;
-
-};
-struct ReplacingCellsList : asn::sequenceof<ReplacingCellsList_elm>
-{
-       static constexpr const char* name() {return "ReplacingCellsList";}
-       using parent_t = asn::sequenceof<ReplacingCellsList_elm>;
-       using constraint_t = asn::constraints<false,asn::span<0,  maxCellineNB >>;
-
-};
-/*
-CellReplacingInfo-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct CellReplacingInfo_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-CellReplacingInfo ::= SEQUENCE {
-       replacingCellsList                              ReplacingCellsList,
-       iE-Extensions                                   ProtocolExtensionContainer { {CellReplacingInfo-ExtIEs}}        OPTIONAL,
-       ...
-}
-*/
-
-struct CellReplacingInfo : asn::sequence<2, 0, true, 1>
-{
-       static constexpr const char* name() {return "CellReplacingInfo";}
-       using parent_t = asn::sequence<2, 0, true, 1>;
-       struct replacingCellsList_t : ReplacingCellsList
-       {
-               static constexpr const char* name() {return "replacingCellsList_t";}
-               using parent_t = ReplacingCellsList;
-
-       };
-       replacingCellsList_t& ref_replacingCellsList() {return replacingCellsList;}
-       replacingCellsList_t const& ref_replacingCellsList() const {return replacingCellsList;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<CellReplacingInfo_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<CellReplacingInfo_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(replacingCellsList);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(replacingCellsList);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               replacingCellsList.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       replacingCellsList_t    replacingCellsList;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-CellReportingIndicator ::= ENUMERATED {stop-request, ... }
-*/
-
-struct CellReportingIndicator : asn::enumerated<1, 0, true>
-{
-       static constexpr const char* name() {return "CellReportingIndicator";}
-       using parent_t = asn::enumerated<1, 0, true>;
-       typedef enum {
-               stop_request
-       } index_t;
-
-};
-
-/*
-CellType-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct CellType_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-CellType ::= SEQUENCE {
-       cell-Size                                               Cell-Size,
-       iE-Extensions                                   ProtocolExtensionContainer { {CellType-ExtIEs}} OPTIONAL,
-       ...
-}
-*/
-
-struct CellType : asn::sequence<2, 0, true, 1>
-{
-       static constexpr const char* name() {return "CellType";}
-       using parent_t = asn::sequence<2, 0, true, 1>;
-       struct cell_Size_t : Cell_Size
-       {
-               static constexpr const char* name() {return "cell_Size_t";}
-               using parent_t = Cell_Size;
-
-       };
-       cell_Size_t& ref_cell_Size() {return cell_Size;}
-       cell_Size_t const& ref_cell_Size() const {return cell_Size;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<CellType_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<CellType_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(cell_Size);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(cell_Size);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               cell_Size.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       cell_Size_t     cell_Size;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-CoMPHypothesisSetItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct CoMPHypothesisSetItem_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-CoMPHypothesisSetItem ::= SEQUENCE {
-       coMPCellID                                              ECGI,
-       coMPHypothesis                                  BIT STRING (SIZE(6..4400, ...)),
-       iE-Extensions                                   ProtocolExtensionContainer { {CoMPHypothesisSetItem-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct CoMPHypothesisSetItem : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "CoMPHypothesisSetItem";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct coMPCellID_t : ECGI
-       {
-               static constexpr const char* name() {return "coMPCellID_t";}
-               using parent_t = ECGI;
-
-       };
-       coMPCellID_t& ref_coMPCellID() {return coMPCellID;}
-       coMPCellID_t const& ref_coMPCellID() const {return coMPCellID;}
-       struct coMPHypothesis_t : asn::bstring<>
-       {
-               using constraint_t = asn::constraints<true,asn::span<6, 4400>>;
-               static constexpr const char* name() {return "coMPHypothesis_t";}
-               using parent_t = asn::bstring<>;
-
-       };
-
-       coMPHypothesis_t& ref_coMPHypothesis() {return coMPHypothesis;}
-       coMPHypothesis_t const& ref_coMPHypothesis() const {return coMPHypothesis;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<CoMPHypothesisSetItem_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<CoMPHypothesisSetItem_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(coMPCellID);
-               v(coMPHypothesis);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(coMPCellID);
-               v(coMPHypothesis);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               coMPCellID.clear();
-               coMPHypothesis.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       coMPCellID_t    coMPCellID;
-       coMPHypothesis_t        coMPHypothesis;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-CoMPHypothesisSet ::= SEQUENCE (SIZE(1..maxnoofCoMPCells)) OF CoMPHypothesisSetItem
-*/
-
-struct CoMPHypothesisSet_elm : CoMPHypothesisSetItem
-{
-       static constexpr const char* name() {return "CoMPHypothesisSet_elm";}
-       using parent_t = CoMPHypothesisSetItem;
-
-};
-struct CoMPHypothesisSet : asn::sequenceof<CoMPHypothesisSet_elm>
-{
-       static constexpr const char* name() {return "CoMPHypothesisSet";}
-       using parent_t = asn::sequenceof<CoMPHypothesisSet_elm>;
-       using constraint_t = asn::constraints<false,asn::span<1,  maxnoofCoMPCells >>;
-
-};
-/*
-CoMPInformationItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct CoMPInformationItem_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-CoMPInformationItem ::= SEQUENCE (SIZE(1..maxnoofCoMPHypothesisSet)) OF
-       SEQUENCE {
-               coMPHypothesisSet                                       CoMPHypothesisSet,
-               benefitMetric                                           BenefitMetric,
-               iE-Extensions                                           ProtocolExtensionContainer { {CoMPInformationItem-ExtIEs} } OPTIONAL,
-               ...
-       }
-*/
-
-struct CoMPInformationItem_elm : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "CoMPInformationItem_elm";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct coMPHypothesisSet_t : CoMPHypothesisSet
-       {
-               static constexpr const char* name() {return "coMPHypothesisSet_t";}
-               using parent_t = CoMPHypothesisSet;
-
-       };
-       coMPHypothesisSet_t& ref_coMPHypothesisSet() {return coMPHypothesisSet;}
-       coMPHypothesisSet_t const& ref_coMPHypothesisSet() const {return coMPHypothesisSet;}
-       struct benefitMetric_t : BenefitMetric
-       {
-               static constexpr const char* name() {return "benefitMetric_t";}
-               using parent_t = BenefitMetric;
-
-       };
-       benefitMetric_t& ref_benefitMetric() {return benefitMetric;}
-       benefitMetric_t const& ref_benefitMetric() const {return benefitMetric;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<CoMPInformationItem_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<CoMPInformationItem_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(coMPHypothesisSet);
-               v(benefitMetric);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(coMPHypothesisSet);
-               v(benefitMetric);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               coMPHypothesisSet.clear();
-               benefitMetric.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       coMPHypothesisSet_t     coMPHypothesisSet;
-       benefitMetric_t benefitMetric;
-       iE_Extensions_t iE_Extensions;
-
-};
-struct CoMPInformationItem : asn::sequenceof<CoMPInformationItem_elm>
-{
-       static constexpr const char* name() {return "CoMPInformationItem";}
-       using parent_t = asn::sequenceof<CoMPInformationItem_elm>;
-       using constraint_t = asn::constraints<false,asn::span<1,  maxnoofCoMPHypothesisSet >>;
-
-};
-/*
-CoMPInformationStartTime-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct CoMPInformationStartTime_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-CoMPInformationStartTime ::= SEQUENCE (SIZE(0..1)) OF
-       SEQUENCE {
-               startSFN                                                        INTEGER (0..1023, ...),
-               startSubframeNumber                                     INTEGER (0..9, ...),
-               iE-Extensions                                           ProtocolExtensionContainer { {CoMPInformationStartTime-ExtIEs} } OPTIONAL,
-               ...
-       }
-*/
-
-struct CoMPInformationStartTime_elm : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "CoMPInformationStartTime_elm";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct startSFN_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<true,asn::span<0, 1023>>;
-               static constexpr const char* name() {return "startSFN_t";}
-               using parent_t = asn::integer<>;
-
-       };
-
-       startSFN_t& ref_startSFN() {return startSFN;}
-       startSFN_t const& ref_startSFN() const {return startSFN;}
-       struct startSubframeNumber_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<true,asn::span<0, 9>>;
-               static constexpr const char* name() {return "startSubframeNumber_t";}
-               using parent_t = asn::integer<>;
-
-       };
-
-       startSubframeNumber_t& ref_startSubframeNumber() {return startSubframeNumber;}
-       startSubframeNumber_t const& ref_startSubframeNumber() const {return startSubframeNumber;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<CoMPInformationStartTime_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<CoMPInformationStartTime_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(startSFN);
-               v(startSubframeNumber);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(startSFN);
-               v(startSubframeNumber);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               startSFN.clear();
-               startSubframeNumber.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       startSFN_t      startSFN;
-       startSubframeNumber_t   startSubframeNumber;
-       iE_Extensions_t iE_Extensions;
-
-};
-struct CoMPInformationStartTime : asn::sequenceof<CoMPInformationStartTime_elm>
-{
-       static constexpr const char* name() {return "CoMPInformationStartTime";}
-       using parent_t = asn::sequenceof<CoMPInformationStartTime_elm>;
-       using constraint_t = asn::constraints<false,asn::span<0, 1>>;
-
-};
-/*
-CoMPInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct CoMPInformation_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-CoMPInformation ::= SEQUENCE {
-       coMPInformationItem                                             CoMPInformationItem,
-       coMPInformationStartTime                                CoMPInformationStartTime,
-       iE-Extensions                                                   ProtocolExtensionContainer { {CoMPInformation-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct CoMPInformation : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "CoMPInformation";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct coMPInformationItem_t : CoMPInformationItem
-       {
-               static constexpr const char* name() {return "coMPInformationItem_t";}
-               using parent_t = CoMPInformationItem;
-
-       };
-       coMPInformationItem_t& ref_coMPInformationItem() {return coMPInformationItem;}
-       coMPInformationItem_t const& ref_coMPInformationItem() const {return coMPInformationItem;}
-       struct coMPInformationStartTime_t : CoMPInformationStartTime
-       {
-               static constexpr const char* name() {return "coMPInformationStartTime_t";}
-               using parent_t = CoMPInformationStartTime;
-
-       };
-       coMPInformationStartTime_t& ref_coMPInformationStartTime() {return coMPInformationStartTime;}
-       coMPInformationStartTime_t const& ref_coMPInformationStartTime() const {return coMPInformationStartTime;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<CoMPInformation_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<CoMPInformation_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(coMPInformationItem);
-               v(coMPInformationStartTime);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(coMPInformationItem);
-               v(coMPInformationStartTime);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               coMPInformationItem.clear();
-               coMPInformationStartTime.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       coMPInformationItem_t   coMPInformationItem;
-       coMPInformationStartTime_t      coMPInformationStartTime;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-CompositeAvailableCapacity-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct CompositeAvailableCapacity_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-CompositeAvailableCapacity ::= SEQUENCE {
-       cellCapacityClassValue                                                  CellCapacityClassValue                          OPTIONAL,
-       capacityValue                                                                   CapacityValue,
-       iE-Extensions                                                                   ProtocolExtensionContainer { {CompositeAvailableCapacity-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct CompositeAvailableCapacity : asn::sequence<3, 0, true, 2>
-{
-       static constexpr const char* name() {return "CompositeAvailableCapacity";}
-       using parent_t = asn::sequence<3, 0, true, 2>;
-       struct cellCapacityClassValue_t : CellCapacityClassValue
-       {
-               static constexpr const char* name() {return "cellCapacityClassValue_t";}
-               using parent_t = CellCapacityClassValue;
-               static constexpr bool optional = true;
-
-       };
-       cellCapacityClassValue_t& set_cellCapacityClassValue() { cellCapacityClassValue.setpresent(true); return cellCapacityClassValue;}
-       cellCapacityClassValue_t const* get_cellCapacityClassValue() const {return cellCapacityClassValue.is_valid() ? &cellCapacityClassValue : nullptr;}
-       struct capacityValue_t : CapacityValue
-       {
-               static constexpr const char* name() {return "capacityValue_t";}
-               using parent_t = CapacityValue;
-
-       };
-       capacityValue_t& ref_capacityValue() {return capacityValue;}
-       capacityValue_t const& ref_capacityValue() const {return capacityValue;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<CompositeAvailableCapacity_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<CompositeAvailableCapacity_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(cellCapacityClassValue);
-               v(capacityValue);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(cellCapacityClassValue);
-               v(capacityValue);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               cellCapacityClassValue.clear();
-               capacityValue.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       cellCapacityClassValue_t        cellCapacityClassValue;
-       capacityValue_t capacityValue;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-CompositeAvailableCapacityGroup-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct CompositeAvailableCapacityGroup_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-CompositeAvailableCapacityGroup        ::= SEQUENCE {
-       dL-CompositeAvailableCapacity                                   CompositeAvailableCapacity,
-       uL-CompositeAvailableCapacity                                   CompositeAvailableCapacity,
-       iE-Extensions                                                                   ProtocolExtensionContainer { {CompositeAvailableCapacityGroup-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct CompositeAvailableCapacityGroup : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "CompositeAvailableCapacityGroup";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct dL_CompositeAvailableCapacity_t : CompositeAvailableCapacity
-       {
-               static constexpr const char* name() {return "dL_CompositeAvailableCapacity_t";}
-               using parent_t = CompositeAvailableCapacity;
-
-       };
-       dL_CompositeAvailableCapacity_t& ref_dL_CompositeAvailableCapacity() {return dL_CompositeAvailableCapacity;}
-       dL_CompositeAvailableCapacity_t const& ref_dL_CompositeAvailableCapacity() const {return dL_CompositeAvailableCapacity;}
-       struct uL_CompositeAvailableCapacity_t : CompositeAvailableCapacity
-       {
-               static constexpr const char* name() {return "uL_CompositeAvailableCapacity_t";}
-               using parent_t = CompositeAvailableCapacity;
-
-       };
-       uL_CompositeAvailableCapacity_t& ref_uL_CompositeAvailableCapacity() {return uL_CompositeAvailableCapacity;}
-       uL_CompositeAvailableCapacity_t const& ref_uL_CompositeAvailableCapacity() const {return uL_CompositeAvailableCapacity;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<CompositeAvailableCapacityGroup_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<CompositeAvailableCapacityGroup_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(dL_CompositeAvailableCapacity);
-               v(uL_CompositeAvailableCapacity);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(dL_CompositeAvailableCapacity);
-               v(uL_CompositeAvailableCapacity);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               dL_CompositeAvailableCapacity.clear();
-               uL_CompositeAvailableCapacity.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       dL_CompositeAvailableCapacity_t dL_CompositeAvailableCapacity;
-       uL_CompositeAvailableCapacity_t uL_CompositeAvailableCapacity;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-Correlation-ID ::= OCTET STRING (SIZE (4))
-*/
-
-struct Correlation_ID : asn::ostring<>
-{
-       using constraint_t = asn::constraints<false,asn::one<4>>;
-       static constexpr const char* name() {return "Correlation-ID";}
-       using parent_t = asn::ostring<>;
-
-};
-
-/*
-CoverageModification-Item ::= SEQUENCE {
-       eCGI                                                    ECGI,
-       coverageState                                   INTEGER (0..15, ...),
-       cellDeploymentStatusIndicator   CellDeploymentStatusIndicator                   OPTIONAL,
-       cellReplacingInfo                               CellReplacingInfo                                               OPTIONAL,
--- Included in case the Cell Deployment Status Indicator IE is present
-       ...
-}
-*/
-
-struct CoverageModification_Item : asn::sequence<4, 0, true, 2>
-{
-       static constexpr const char* name() {return "CoverageModification-Item";}
-       using parent_t = asn::sequence<4, 0, true, 2>;
-       struct eCGI_t : ECGI
-       {
-               static constexpr const char* name() {return "eCGI_t";}
-               using parent_t = ECGI;
-
-       };
-       eCGI_t& ref_eCGI() {return eCGI;}
-       eCGI_t const& ref_eCGI() const {return eCGI;}
-       struct coverageState_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<true,asn::span<0, 15>>;
-               static constexpr const char* name() {return "coverageState_t";}
-               using parent_t = asn::integer<>;
-
-       };
-
-       coverageState_t& ref_coverageState() {return coverageState;}
-       coverageState_t const& ref_coverageState() const {return coverageState;}
-       struct cellDeploymentStatusIndicator_t : CellDeploymentStatusIndicator
-       {
-               static constexpr const char* name() {return "cellDeploymentStatusIndicator_t";}
-               using parent_t = CellDeploymentStatusIndicator;
-               static constexpr bool optional = true;
-
-       };
-       cellDeploymentStatusIndicator_t& set_cellDeploymentStatusIndicator() { cellDeploymentStatusIndicator.setpresent(true); return cellDeploymentStatusIndicator;}
-       cellDeploymentStatusIndicator_t const* get_cellDeploymentStatusIndicator() const {return cellDeploymentStatusIndicator.is_valid() ? &cellDeploymentStatusIndicator : nullptr;}
-       struct cellReplacingInfo_t : CellReplacingInfo
-       {
-               static constexpr const char* name() {return "cellReplacingInfo_t";}
-               using parent_t = CellReplacingInfo;
-               static constexpr bool optional = true;
-
-       };
-       cellReplacingInfo_t& set_cellReplacingInfo() { cellReplacingInfo.setpresent(true); return cellReplacingInfo;}
-       cellReplacingInfo_t const* get_cellReplacingInfo() const {return cellReplacingInfo.is_valid() ? &cellReplacingInfo : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(eCGI);
-               v(coverageState);
-               v(cellDeploymentStatusIndicator);
-               v(cellReplacingInfo);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(eCGI);
-               v(coverageState);
-               v(cellDeploymentStatusIndicator);
-               v(cellReplacingInfo);
-
-       };
-       void clear()
-       {
-               eCGI.clear();
-               coverageState.clear();
-               cellDeploymentStatusIndicator.clear();
-               cellReplacingInfo.clear();
-
-       };
-       private:
-       eCGI_t  eCGI;
-       coverageState_t coverageState;
-       cellDeploymentStatusIndicator_t cellDeploymentStatusIndicator;
-       cellReplacingInfo_t     cellReplacingInfo;
-
-};
-/*
-CoverageModificationList ::= SEQUENCE (SIZE (1..maxCellineNB)) OF CoverageModification-Item
-*/
-
-struct CoverageModificationList_elm : CoverageModification_Item
-{
-       static constexpr const char* name() {return "CoverageModificationList_elm";}
-       using parent_t = CoverageModification_Item;
-
-};
-struct CoverageModificationList : asn::sequenceof<CoverageModificationList_elm>
-{
-       static constexpr const char* name() {return "CoverageModificationList";}
-       using parent_t = asn::sequenceof<CoverageModificationList_elm>;
-       using constraint_t = asn::constraints<false,asn::span<1,  maxCellineNB >>;
-
-};
-/*
-TypeOfError ::= ENUMERATED {
-       not-understood,
-       missing,
-       ...
-}
-*/
-
-struct TypeOfError : asn::enumerated<2, 0, true>
-{
-       static constexpr const char* name() {return "TypeOfError";}
-       using parent_t = asn::enumerated<2, 0, true>;
-       typedef enum {
-               not_understood
-               ,missing
-       } index_t;
-
-};
-
-/*
-CriticalityDiagnostics-IE-List-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct CriticalityDiagnostics_IE_List_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-CriticalityDiagnostics-IE-List ::= SEQUENCE (SIZE (1..maxNrOfErrors)) OF
-       SEQUENCE {
-               iECriticality                   Criticality,
-               iE-ID                                   ProtocolIE-ID,
-               typeOfError                             TypeOfError,
-               iE-Extensions                   ProtocolExtensionContainer { {CriticalityDiagnostics-IE-List-ExtIEs} } OPTIONAL,
-               ...
-}
-*/
-
-struct CriticalityDiagnostics_IE_List_elm : asn::sequence<4, 0, true, 1>
-{
-       static constexpr const char* name() {return "CriticalityDiagnostics_IE_List_elm";}
-       using parent_t = asn::sequence<4, 0, true, 1>;
-       struct iECriticality_t : Criticality
-       {
-               static constexpr const char* name() {return "iECriticality_t";}
-               using parent_t = Criticality;
-
-       };
-       iECriticality_t& ref_iECriticality() {return iECriticality;}
-       iECriticality_t const& ref_iECriticality() const {return iECriticality;}
-       struct iE_ID_t : ProtocolIE_ID
-       {
-               static constexpr const char* name() {return "iE_ID_t";}
-               using parent_t = ProtocolIE_ID;
-
-       };
-       iE_ID_t& ref_iE_ID() {return iE_ID;}
-       iE_ID_t const& ref_iE_ID() const {return iE_ID;}
-       struct typeOfError_t : TypeOfError
-       {
-               static constexpr const char* name() {return "typeOfError_t";}
-               using parent_t = TypeOfError;
-
-       };
-       typeOfError_t& ref_typeOfError() {return typeOfError;}
-       typeOfError_t const& ref_typeOfError() const {return typeOfError;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<CriticalityDiagnostics_IE_List_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<CriticalityDiagnostics_IE_List_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(iECriticality);
-               v(iE_ID);
-               v(typeOfError);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(iECriticality);
-               v(iE_ID);
-               v(typeOfError);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               iECriticality.clear();
-               iE_ID.clear();
-               typeOfError.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       iECriticality_t iECriticality;
-       iE_ID_t iE_ID;
-       typeOfError_t   typeOfError;
-       iE_Extensions_t iE_Extensions;
-
-};
-struct CriticalityDiagnostics_IE_List : asn::sequenceof<CriticalityDiagnostics_IE_List_elm>
-{
-       static constexpr const char* name() {return "CriticalityDiagnostics-IE-List";}
-       using parent_t = asn::sequenceof<CriticalityDiagnostics_IE_List_elm>;
-       using constraint_t = asn::constraints<false,asn::span<1,  maxNrOfErrors >>;
-
-};
-/*
-CriticalityDiagnostics-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct CriticalityDiagnostics_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-CriticalityDiagnostics ::= SEQUENCE {
-       procedureCode                                   ProcedureCode                                   OPTIONAL,
-       triggeringMessage                               TriggeringMessage                               OPTIONAL,
-       procedureCriticality                    Criticality                                             OPTIONAL,
-       iEsCriticalityDiagnostics               CriticalityDiagnostics-IE-List  OPTIONAL,
-       iE-Extensions                                   ProtocolExtensionContainer { {CriticalityDiagnostics-ExtIEs} }  OPTIONAL,
-       ...
-}
-*/
-
-struct CriticalityDiagnostics : asn::sequence<5, 0, true, 5>
-{
-       static constexpr const char* name() {return "CriticalityDiagnostics";}
-       using parent_t = asn::sequence<5, 0, true, 5>;
-       struct procedureCode_t : ProcedureCode
-       {
-               static constexpr const char* name() {return "procedureCode_t";}
-               using parent_t = ProcedureCode;
-               static constexpr bool optional = true;
-
-       };
-       procedureCode_t& set_procedureCode() { procedureCode.setpresent(true); return procedureCode;}
-       procedureCode_t const* get_procedureCode() const {return procedureCode.is_valid() ? &procedureCode : nullptr;}
-       struct triggeringMessage_t : TriggeringMessage
-       {
-               static constexpr const char* name() {return "triggeringMessage_t";}
-               using parent_t = TriggeringMessage;
-               static constexpr bool optional = true;
-
-       };
-       triggeringMessage_t& set_triggeringMessage() { triggeringMessage.setpresent(true); return triggeringMessage;}
-       triggeringMessage_t const* get_triggeringMessage() const {return triggeringMessage.is_valid() ? &triggeringMessage : nullptr;}
-       struct procedureCriticality_t : Criticality
-       {
-               static constexpr const char* name() {return "procedureCriticality_t";}
-               using parent_t = Criticality;
-               static constexpr bool optional = true;
-
-       };
-       procedureCriticality_t& set_procedureCriticality() { procedureCriticality.setpresent(true); return procedureCriticality;}
-       procedureCriticality_t const* get_procedureCriticality() const {return procedureCriticality.is_valid() ? &procedureCriticality : nullptr;}
-       struct iEsCriticalityDiagnostics_t : CriticalityDiagnostics_IE_List
-       {
-               static constexpr const char* name() {return "iEsCriticalityDiagnostics_t";}
-               using parent_t = CriticalityDiagnostics_IE_List;
-               static constexpr bool optional = true;
-
-       };
-       iEsCriticalityDiagnostics_t& set_iEsCriticalityDiagnostics() { iEsCriticalityDiagnostics.setpresent(true); return iEsCriticalityDiagnostics;}
-       iEsCriticalityDiagnostics_t const* get_iEsCriticalityDiagnostics() const {return iEsCriticalityDiagnostics.is_valid() ? &iEsCriticalityDiagnostics : nullptr;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<CriticalityDiagnostics_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<CriticalityDiagnostics_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(procedureCode);
-               v(triggeringMessage);
-               v(procedureCriticality);
-               v(iEsCriticalityDiagnostics);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(procedureCode);
-               v(triggeringMessage);
-               v(procedureCriticality);
-               v(iEsCriticalityDiagnostics);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               procedureCode.clear();
-               triggeringMessage.clear();
-               procedureCriticality.clear();
-               iEsCriticalityDiagnostics.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       procedureCode_t procedureCode;
-       triggeringMessage_t     triggeringMessage;
-       procedureCriticality_t  procedureCriticality;
-       iEsCriticalityDiagnostics_t     iEsCriticalityDiagnostics;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-DL-Forwarding ::= ENUMERATED {
-       dL-forwardingProposed,
-       ...
-}
-*/
-
-struct DL_Forwarding : asn::enumerated<1, 0, true>
-{
-       static constexpr const char* name() {return "DL-Forwarding";}
-       using parent_t = asn::enumerated<1, 0, true>;
-       typedef enum {
-               dL_forwardingProposed
-       } index_t;
-
-};
-
-/*
-DL-GBR-PRB-usage::= INTEGER (0..100)
-*/
-
-struct DL_GBR_PRB_usage : asn::integer<>
-{
-       using constraint_t = asn::constraints<false,asn::span<0, 100>>;
-       static constexpr const char* name() {return "DL-GBR-PRB-usage";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-DL-Total-PRB-usage::= INTEGER (0..100)
-*/
-
-struct DL_Total_PRB_usage : asn::integer<>
-{
-       using constraint_t = asn::constraints<false,asn::span<0, 100>>;
-       static constexpr const char* name() {return "DL-Total-PRB-usage";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-DL-non-GBR-PRB-usage::= INTEGER (0..100)
-*/
-
-struct DL_non_GBR_PRB_usage : asn::integer<>
-{
-       using constraint_t = asn::constraints<false,asn::span<0, 100>>;
-       static constexpr const char* name() {return "DL-non-GBR-PRB-usage";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-DL-scheduling-PDCCH-CCE-usage::= INTEGER (0..100)
-*/
-
-struct DL_scheduling_PDCCH_CCE_usage : asn::integer<>
-{
-       using constraint_t = asn::constraints<false,asn::span<0, 100>>;
-       static constexpr const char* name() {return "DL-scheduling-PDCCH-CCE-usage";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-DataTrafficResources ::= BIT STRING (SIZE(6..17600))
-*/
-
-struct DataTrafficResources : asn::bstring<>
-{
-       using constraint_t = asn::constraints<false,asn::span<6, 17600>>;
-       static constexpr const char* name() {return "DataTrafficResources";}
-       using parent_t = asn::bstring<>;
-
-};
-
-/*
-DLResourceBitmapULandDLSharing ::= DataTrafficResources
-*/
-
-struct DLResourceBitmapULandDLSharing : DataTrafficResources
-{
-       static constexpr const char* name() {return "DLResourceBitmapULandDLSharing";}
-       using parent_t = DataTrafficResources;
-
-};
-/*
-DLResourcesULandDLSharing ::= CHOICE {
-unchanged                      NULL,
-       changed                         DLResourceBitmapULandDLSharing,
-       ...
-}
-*/
-
-struct DLResourcesULandDLSharing : asn::choice<2, 0, true>
-{
-       static constexpr const char* name() {return "DLResourcesULandDLSharing";}
-       using parent_t = asn::choice<2, 0, true>;
-       index_type get_index() const {return index;}
-       bool is_unknown() const {return index == 3;}
-       void set_unknown() { set_index(3);  }
-       ~DLResourcesULandDLSharing() {clear();}
-       struct unchanged_t : asn::nulltype
-       {
-               static constexpr const char* name() {return "unchanged_t";}
-               using parent_t = asn::nulltype;
-
-       };
-       struct changed_t : DLResourceBitmapULandDLSharing
-       {
-               static constexpr const char* name() {return "changed_t";}
-               using parent_t = DLResourceBitmapULandDLSharing;
-
-       };
-       void clear()
-       {
-               switch(get_index())
-               {
-               case 1: var.destroy<unchanged_t>(); break;
-               case 2: var.destroy<changed_t>(); break;
-               }
-               index = 0;
-               base::clear();
-       }
-       template<typename V> bool decode(size_t idx, V& v)
-       {
-               clear();
-               switch(idx)
-               {
-               case 1: set_index(1); return v(var.build<unchanged_t>());
-               case 2: set_index(2); return v(var.build<changed_t>());
-               }
-               return false;
-
-       }
-       template<typename V> bool encode(V& v) const
-       {
-               switch(get_index())
-               {
-               case 1: return v(var.as<unchanged_t>());
-               case 2: return v(var.as<changed_t>());
-               }
-               return false;
-       }
-       template<typename V> static inline void enumerate(V& v)
-       {
-               v.template operator()<unchanged_t>(1);
-               v.template operator()<changed_t>(2);
-
-       }
-       unchanged_t& select_unchanged() { if(get_index() != 1) { clear(); set_index(1); return var.build<unchanged_t>();} return var.as<unchanged_t>();}
-       unchanged_t const* get_unchanged() const { if(get_index() == 1) { return &var.as<unchanged_t>();} return nullptr; }
-       changed_t& select_changed() { if(get_index() != 2) { clear(); set_index(2); return var.build<changed_t>();} return var.as<changed_t>();}
-       changed_t const* get_changed() const { if(get_index() == 2) { return &var.as<changed_t>();} return nullptr; }
-       private:
-       void set_index(index_type i) {index = i; base::set();}
-       union union_type
-       {
-               char dummy1[sizeof(unchanged_t)];
-               char dummy2[sizeof(changed_t)];
-
-       };
-       asn::variant<sizeof(union_type)>        var;
-       index_type      index {0};
-};
-/*
-DRB-ID ::= INTEGER (1..32)
-*/
-
-struct DRB_ID : asn::integer<>
-{
-       using constraint_t = asn::constraints<false,asn::span<1, 32>>;
-       static constexpr const char* name() {return "DRB-ID";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-ULOnlySharing-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct ULOnlySharing_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-ULOnlySharing ::= SEQUENCE{
-       uLResourceBitmapULOnlySharing   DataTrafficResources,
-       iE-Extensions                                   ProtocolExtensionContainer { {ULOnlySharing-ExtIEs} }                           OPTIONAL,
-       ...
-}
-*/
-
-struct ULOnlySharing : asn::sequence<2, 0, true, 1>
-{
-       static constexpr const char* name() {return "ULOnlySharing";}
-       using parent_t = asn::sequence<2, 0, true, 1>;
-       struct uLResourceBitmapULOnlySharing_t : DataTrafficResources
-       {
-               static constexpr const char* name() {return "uLResourceBitmapULOnlySharing_t";}
-               using parent_t = DataTrafficResources;
-
-       };
-       uLResourceBitmapULOnlySharing_t& ref_uLResourceBitmapULOnlySharing() {return uLResourceBitmapULOnlySharing;}
-       uLResourceBitmapULOnlySharing_t const& ref_uLResourceBitmapULOnlySharing() const {return uLResourceBitmapULOnlySharing;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<ULOnlySharing_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<ULOnlySharing_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(uLResourceBitmapULOnlySharing);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(uLResourceBitmapULOnlySharing);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               uLResourceBitmapULOnlySharing.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       uLResourceBitmapULOnlySharing_t uLResourceBitmapULOnlySharing;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-ULResourceBitmapULandDLSharing ::= DataTrafficResources
-*/
-
-struct ULResourceBitmapULandDLSharing : DataTrafficResources
-{
-       static constexpr const char* name() {return "ULResourceBitmapULandDLSharing";}
-       using parent_t = DataTrafficResources;
-
-};
-/*
-ULResourcesULandDLSharing ::= CHOICE {
-       unchanged                       NULL,
-       changed                         ULResourceBitmapULandDLSharing,
-       ...
-}
-*/
-
-struct ULResourcesULandDLSharing : asn::choice<2, 0, true>
-{
-       static constexpr const char* name() {return "ULResourcesULandDLSharing";}
-       using parent_t = asn::choice<2, 0, true>;
-       index_type get_index() const {return index;}
-       bool is_unknown() const {return index == 3;}
-       void set_unknown() { set_index(3);  }
-       ~ULResourcesULandDLSharing() {clear();}
-       struct unchanged_t : asn::nulltype
-       {
-               static constexpr const char* name() {return "unchanged_t";}
-               using parent_t = asn::nulltype;
-
-       };
-       struct changed_t : ULResourceBitmapULandDLSharing
-       {
-               static constexpr const char* name() {return "changed_t";}
-               using parent_t = ULResourceBitmapULandDLSharing;
-
-       };
-       void clear()
-       {
-               switch(get_index())
-               {
-               case 1: var.destroy<unchanged_t>(); break;
-               case 2: var.destroy<changed_t>(); break;
-               }
-               index = 0;
-               base::clear();
-       }
-       template<typename V> bool decode(size_t idx, V& v)
-       {
-               clear();
-               switch(idx)
-               {
-               case 1: set_index(1); return v(var.build<unchanged_t>());
-               case 2: set_index(2); return v(var.build<changed_t>());
-               }
-               return false;
-
-       }
-       template<typename V> bool encode(V& v) const
-       {
-               switch(get_index())
-               {
-               case 1: return v(var.as<unchanged_t>());
-               case 2: return v(var.as<changed_t>());
-               }
-               return false;
-       }
-       template<typename V> static inline void enumerate(V& v)
-       {
-               v.template operator()<unchanged_t>(1);
-               v.template operator()<changed_t>(2);
-
-       }
-       unchanged_t& select_unchanged() { if(get_index() != 1) { clear(); set_index(1); return var.build<unchanged_t>();} return var.as<unchanged_t>();}
-       unchanged_t const* get_unchanged() const { if(get_index() == 1) { return &var.as<unchanged_t>();} return nullptr; }
-       changed_t& select_changed() { if(get_index() != 2) { clear(); set_index(2); return var.build<changed_t>();} return var.as<changed_t>();}
-       changed_t const* get_changed() const { if(get_index() == 2) { return &var.as<changed_t>();} return nullptr; }
-       private:
-       void set_index(index_type i) {index = i; base::set();}
-       union union_type
-       {
-               char dummy1[sizeof(unchanged_t)];
-               char dummy2[sizeof(changed_t)];
-
-       };
-       asn::variant<sizeof(union_type)>        var;
-       index_type      index {0};
-};
-/*
-ULandDLSharing-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct ULandDLSharing_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-ULandDLSharing ::= SEQUENCE{
-       uLResourcesULandDLSharing                               ULResourcesULandDLSharing,
-       dLResourcesULandDLSharing                               DLResourcesULandDLSharing,
-       iE-Extensions                   ProtocolExtensionContainer { {ULandDLSharing-ExtIEs} }                          OPTIONAL,
-       ...
-}
-*/
-
-struct ULandDLSharing : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "ULandDLSharing";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct uLResourcesULandDLSharing_t : ULResourcesULandDLSharing
-       {
-               static constexpr const char* name() {return "uLResourcesULandDLSharing_t";}
-               using parent_t = ULResourcesULandDLSharing;
-
-       };
-       uLResourcesULandDLSharing_t& ref_uLResourcesULandDLSharing() {return uLResourcesULandDLSharing;}
-       uLResourcesULandDLSharing_t const& ref_uLResourcesULandDLSharing() const {return uLResourcesULandDLSharing;}
-       struct dLResourcesULandDLSharing_t : DLResourcesULandDLSharing
-       {
-               static constexpr const char* name() {return "dLResourcesULandDLSharing_t";}
-               using parent_t = DLResourcesULandDLSharing;
-
-       };
-       dLResourcesULandDLSharing_t& ref_dLResourcesULandDLSharing() {return dLResourcesULandDLSharing;}
-       dLResourcesULandDLSharing_t const& ref_dLResourcesULandDLSharing() const {return dLResourcesULandDLSharing;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<ULandDLSharing_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<ULandDLSharing_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(uLResourcesULandDLSharing);
-               v(dLResourcesULandDLSharing);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(uLResourcesULandDLSharing);
-               v(dLResourcesULandDLSharing);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               uLResourcesULandDLSharing.clear();
-               dLResourcesULandDLSharing.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       uLResourcesULandDLSharing_t     uLResourcesULandDLSharing;
-       dLResourcesULandDLSharing_t     dLResourcesULandDLSharing;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-SharedResourceType ::= CHOICE{
-       uLOnlySharing           ULOnlySharing,
-       uLandDLSharing          ULandDLSharing,
-       ...
-}
-*/
-
-struct SharedResourceType : asn::choice<2, 0, true>
-{
-       static constexpr const char* name() {return "SharedResourceType";}
-       using parent_t = asn::choice<2, 0, true>;
-       index_type get_index() const {return index;}
-       bool is_unknown() const {return index == 3;}
-       void set_unknown() { set_index(3);  }
-       ~SharedResourceType() {clear();}
-       struct uLOnlySharing_t : ULOnlySharing
-       {
-               static constexpr const char* name() {return "uLOnlySharing_t";}
-               using parent_t = ULOnlySharing;
-
-       };
-       struct uLandDLSharing_t : ULandDLSharing
-       {
-               static constexpr const char* name() {return "uLandDLSharing_t";}
-               using parent_t = ULandDLSharing;
-
-       };
-       void clear()
-       {
-               switch(get_index())
-               {
-               case 1: var.destroy<uLOnlySharing_t>(); break;
-               case 2: var.destroy<uLandDLSharing_t>(); break;
-               }
-               index = 0;
-               base::clear();
-       }
-       template<typename V> bool decode(size_t idx, V& v)
-       {
-               clear();
-               switch(idx)
-               {
-               case 1: set_index(1); return v(var.build<uLOnlySharing_t>());
-               case 2: set_index(2); return v(var.build<uLandDLSharing_t>());
-               }
-               return false;
-
-       }
-       template<typename V> bool encode(V& v) const
-       {
-               switch(get_index())
-               {
-               case 1: return v(var.as<uLOnlySharing_t>());
-               case 2: return v(var.as<uLandDLSharing_t>());
-               }
-               return false;
-       }
-       template<typename V> static inline void enumerate(V& v)
-       {
-               v.template operator()<uLOnlySharing_t>(1);
-               v.template operator()<uLandDLSharing_t>(2);
-
-       }
-       uLOnlySharing_t& select_uLOnlySharing() { if(get_index() != 1) { clear(); set_index(1); return var.build<uLOnlySharing_t>();} return var.as<uLOnlySharing_t>();}
-       uLOnlySharing_t const* get_uLOnlySharing() const { if(get_index() == 1) { return &var.as<uLOnlySharing_t>();} return nullptr; }
-       uLandDLSharing_t& select_uLandDLSharing() { if(get_index() != 2) { clear(); set_index(2); return var.build<uLandDLSharing_t>();} return var.as<uLandDLSharing_t>();}
-       uLandDLSharing_t const* get_uLandDLSharing() const { if(get_index() == 2) { return &var.as<uLandDLSharing_t>();} return nullptr; }
-       private:
-       void set_index(index_type i) {index = i; base::set();}
-       union union_type
-       {
-               char dummy1[sizeof(uLOnlySharing_t)];
-               char dummy2[sizeof(uLandDLSharing_t)];
-
-       };
-       asn::variant<sizeof(union_type)>        var;
-       index_type      index {0};
-};
-/*
-SubframeType ::= ENUMERATED{mbsfn,nonmbsfn,...}
-*/
-
-struct SubframeType : asn::enumerated<2, 0, true>
-{
-       static constexpr const char* name() {return "SubframeType";}
-       using parent_t = asn::enumerated<2, 0, true>;
-       typedef enum {
-               mbsfn
-               ,nonmbsfn
-       } index_t;
-
-};
-
-/*
-ReservedSubframePattern-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct ReservedSubframePattern_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-ReservedSubframePattern ::= SEQUENCE{
-       subframeType                                    SubframeType,
-       reservedSubframePattern                 BIT STRING (SIZE(10..160)),
-       mBSFNControlRegionLength                INTEGER (0..3),
-       iE-Extensions                                   ProtocolExtensionContainer { {ReservedSubframePattern-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct ReservedSubframePattern : asn::sequence<4, 0, true, 1>
-{
-       static constexpr const char* name() {return "ReservedSubframePattern";}
-       using parent_t = asn::sequence<4, 0, true, 1>;
-       struct subframeType_t : SubframeType
-       {
-               static constexpr const char* name() {return "subframeType_t";}
-               using parent_t = SubframeType;
-
-       };
-       subframeType_t& ref_subframeType() {return subframeType;}
-       subframeType_t const& ref_subframeType() const {return subframeType;}
-       struct reservedSubframePattern_t : asn::bstring<>
-       {
-               using constraint_t = asn::constraints<false,asn::span<10, 160>>;
-               static constexpr const char* name() {return "reservedSubframePattern_t";}
-               using parent_t = asn::bstring<>;
-
-       };
-
-       reservedSubframePattern_t& ref_reservedSubframePattern() {return reservedSubframePattern;}
-       reservedSubframePattern_t const& ref_reservedSubframePattern() const {return reservedSubframePattern;}
-       struct mBSFNControlRegionLength_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<false,asn::span<0, 3>>;
-               static constexpr const char* name() {return "mBSFNControlRegionLength_t";}
-               using parent_t = asn::integer<>;
-
-       };
-
-       mBSFNControlRegionLength_t& ref_mBSFNControlRegionLength() {return mBSFNControlRegionLength;}
-       mBSFNControlRegionLength_t const& ref_mBSFNControlRegionLength() const {return mBSFNControlRegionLength;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<ReservedSubframePattern_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<ReservedSubframePattern_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(subframeType);
-               v(reservedSubframePattern);
-               v(mBSFNControlRegionLength);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(subframeType);
-               v(reservedSubframePattern);
-               v(mBSFNControlRegionLength);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               subframeType.clear();
-               reservedSubframePattern.clear();
-               mBSFNControlRegionLength.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       subframeType_t  subframeType;
-       reservedSubframePattern_t       reservedSubframePattern;
-       mBSFNControlRegionLength_t      mBSFNControlRegionLength;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-DataTrafficResourceIndication-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct DataTrafficResourceIndication_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-DataTrafficResourceIndication ::= SEQUENCE {
-       activationSFN                                   INTEGER (0..1023),
-       sharedResourceType                              SharedResourceType,
-       reservedSubframePattern                 ReservedSubframePattern OPTIONAL,
-       iE-Extensions                                   ProtocolExtensionContainer { {DataTrafficResourceIndication-ExtIEs} } OPTIONAL,
-...
-}
-*/
-
-struct DataTrafficResourceIndication : asn::sequence<4, 0, true, 2>
-{
-       static constexpr const char* name() {return "DataTrafficResourceIndication";}
-       using parent_t = asn::sequence<4, 0, true, 2>;
-       struct activationSFN_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<false,asn::span<0, 1023>>;
-               static constexpr const char* name() {return "activationSFN_t";}
-               using parent_t = asn::integer<>;
-
-       };
-
-       activationSFN_t& ref_activationSFN() {return activationSFN;}
-       activationSFN_t const& ref_activationSFN() const {return activationSFN;}
-       struct sharedResourceType_t : SharedResourceType
-       {
-               static constexpr const char* name() {return "sharedResourceType_t";}
-               using parent_t = SharedResourceType;
-
-       };
-       sharedResourceType_t& ref_sharedResourceType() {return sharedResourceType;}
-       sharedResourceType_t const& ref_sharedResourceType() const {return sharedResourceType;}
-       struct reservedSubframePattern_t : ReservedSubframePattern
-       {
-               static constexpr const char* name() {return "reservedSubframePattern_t";}
-               using parent_t = ReservedSubframePattern;
-               static constexpr bool optional = true;
-
-       };
-       reservedSubframePattern_t& set_reservedSubframePattern() { reservedSubframePattern.setpresent(true); return reservedSubframePattern;}
-       reservedSubframePattern_t const* get_reservedSubframePattern() const {return reservedSubframePattern.is_valid() ? &reservedSubframePattern : nullptr;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<DataTrafficResourceIndication_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<DataTrafficResourceIndication_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(activationSFN);
-               v(sharedResourceType);
-               v(reservedSubframePattern);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(activationSFN);
-               v(sharedResourceType);
-               v(reservedSubframePattern);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               activationSFN.clear();
-               sharedResourceType.clear();
-               reservedSubframePattern.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       activationSFN_t activationSFN;
-       sharedResourceType_t    sharedResourceType;
-       reservedSubframePattern_t       reservedSubframePattern;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-DeactivationIndication::= ENUMERATED {
-       deactivated,
-       ...
-}
-*/
-
-struct DeactivationIndication : asn::enumerated<1, 0, true>
-{
-       static constexpr const char* name() {return "DeactivationIndication";}
-       using parent_t = asn::enumerated<1, 0, true>;
-       typedef enum {
-               deactivated
-       } index_t;
-
-};
-
-/*
-DeliveryStatus-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct DeliveryStatus_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-DeliveryStatus ::= SEQUENCE {
-       highestSuccessDeliveredPDCPSN           INTEGER (0..4095),
-       iE-Extensions           ProtocolExtensionContainer { {DeliveryStatus-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct DeliveryStatus : asn::sequence<2, 0, true, 1>
-{
-       static constexpr const char* name() {return "DeliveryStatus";}
-       using parent_t = asn::sequence<2, 0, true, 1>;
-       struct highestSuccessDeliveredPDCPSN_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<false,asn::span<0, 4095>>;
-               static constexpr const char* name() {return "highestSuccessDeliveredPDCPSN_t";}
-               using parent_t = asn::integer<>;
-
-       };
-
-       highestSuccessDeliveredPDCPSN_t& ref_highestSuccessDeliveredPDCPSN() {return highestSuccessDeliveredPDCPSN;}
-       highestSuccessDeliveredPDCPSN_t const& ref_highestSuccessDeliveredPDCPSN() const {return highestSuccessDeliveredPDCPSN;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<DeliveryStatus_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<DeliveryStatus_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(highestSuccessDeliveredPDCPSN);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(highestSuccessDeliveredPDCPSN);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               highestSuccessDeliveredPDCPSN.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       highestSuccessDeliveredPDCPSN_t highestSuccessDeliveredPDCPSN;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-DuplicationActivation::= ENUMERATED {active, inactive, ...}
-*/
-
-struct DuplicationActivation : asn::enumerated<2, 0, true>
-{
-       static constexpr const char* name() {return "DuplicationActivation";}
-       using parent_t = asn::enumerated<2, 0, true>;
-       typedef enum {
-               active
-               ,inactive
-       } index_t;
-
-};
-
-/*
-PA-Values ::= ENUMERATED {
-       dB-6,
-       dB-4dot77,
-       dB-3,
-       dB-1dot77,
-       dB0,
-       dB1,
-       dB2,
-       dB3,
-       ...
-}
-*/
-
-struct PA_Values : asn::enumerated<8, 0, true>
-{
-       static constexpr const char* name() {return "PA-Values";}
-       using parent_t = asn::enumerated<8, 0, true>;
-       typedef enum {
-               dB_6
-               ,dB_4dot77
-               ,dB_3
-               ,dB_1dot77
-               ,dB0
-               ,dB1
-               ,dB2
-               ,dB3
-       } index_t;
-
-};
-
-/*
-DynamicNAICSInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct DynamicNAICSInformation_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-DynamicNAICSInformation ::= SEQUENCE {
-       transmissionModes                                       BIT STRING (SIZE(8))                                                                                            OPTIONAL,
-       pB-information                                          INTEGER(0..3)                                                                                                           OPTIONAL,
-       pA-list                                                         SEQUENCE (SIZE(0..maxnoofPA)) OF PA-Values,
-       iE-Extensions                                           ProtocolExtensionContainer { {DynamicNAICSInformation-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct DynamicNAICSInformation : asn::sequence<4, 0, true, 3>
-{
-       static constexpr const char* name() {return "DynamicNAICSInformation";}
-       using parent_t = asn::sequence<4, 0, true, 3>;
-       struct transmissionModes_t : asn::bstring<>
-       {
-               using constraint_t = asn::constraints<false,asn::one<8>>;
-               static constexpr const char* name() {return "transmissionModes_t";}
-               using parent_t = asn::bstring<>;
-               static constexpr bool optional = true;
-
-       };
-
-       transmissionModes_t& set_transmissionModes() { transmissionModes.setpresent(true); return transmissionModes;}
-       transmissionModes_t const* get_transmissionModes() const {return transmissionModes.is_valid() ? &transmissionModes : nullptr;}
-       struct pB_information_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<false,asn::span<0, 3>>;
-               static constexpr const char* name() {return "pB_information_t";}
-               using parent_t = asn::integer<>;
-               static constexpr bool optional = true;
-
-       };
-
-       pB_information_t& set_pB_information() { pB_information.setpresent(true); return pB_information;}
-       pB_information_t const* get_pB_information() const {return pB_information.is_valid() ? &pB_information : nullptr;}
-       struct pA_list_t_elm : PA_Values
-       {
-               static constexpr const char* name() {return "pA_list_t_elm";}
-               using parent_t = PA_Values;
-
-       };
-       struct pA_list_t : asn::sequenceof<pA_list_t_elm>
-       {
-               static constexpr const char* name() {return "pA_list_t";}
-               using parent_t = asn::sequenceof<pA_list_t_elm>;
-               using constraint_t = asn::constraints<false,asn::span<0,  maxnoofPA >>;
-
-       };
-       pA_list_t& ref_pA_list() {return pA_list;}
-       pA_list_t const& ref_pA_list() const {return pA_list;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<DynamicNAICSInformation_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<DynamicNAICSInformation_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(transmissionModes);
-               v(pB_information);
-               v(pA_list);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(transmissionModes);
-               v(pB_information);
-               v(pA_list);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               transmissionModes.clear();
-               pB_information.clear();
-               pA_list.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       transmissionModes_t     transmissionModes;
-       pB_information_t        pB_information;
-       pA_list_t       pA_list;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-DynamicDLTransmissionInformation ::= CHOICE {
-       naics-active                    DynamicNAICSInformation,
-       naics-inactive                  NULL,
-       ...
-}
-*/
-
-struct DynamicDLTransmissionInformation : asn::choice<2, 0, true>
-{
-       static constexpr const char* name() {return "DynamicDLTransmissionInformation";}
-       using parent_t = asn::choice<2, 0, true>;
-       index_type get_index() const {return index;}
-       bool is_unknown() const {return index == 3;}
-       void set_unknown() { set_index(3);  }
-       ~DynamicDLTransmissionInformation() {clear();}
-       struct naics_active_t : DynamicNAICSInformation
-       {
-               static constexpr const char* name() {return "naics_active_t";}
-               using parent_t = DynamicNAICSInformation;
-
-       };
-       struct naics_inactive_t : asn::nulltype
-       {
-               static constexpr const char* name() {return "naics_inactive_t";}
-               using parent_t = asn::nulltype;
-
-       };
-       void clear()
-       {
-               switch(get_index())
-               {
-               case 1: var.destroy<naics_active_t>(); break;
-               case 2: var.destroy<naics_inactive_t>(); break;
-               }
-               index = 0;
-               base::clear();
-       }
-       template<typename V> bool decode(size_t idx, V& v)
-       {
-               clear();
-               switch(idx)
-               {
-               case 1: set_index(1); return v(var.build<naics_active_t>());
-               case 2: set_index(2); return v(var.build<naics_inactive_t>());
-               }
-               return false;
-
-       }
-       template<typename V> bool encode(V& v) const
-       {
-               switch(get_index())
-               {
-               case 1: return v(var.as<naics_active_t>());
-               case 2: return v(var.as<naics_inactive_t>());
-               }
-               return false;
-       }
-       template<typename V> static inline void enumerate(V& v)
-       {
-               v.template operator()<naics_active_t>(1);
-               v.template operator()<naics_inactive_t>(2);
-
-       }
-       naics_active_t& select_naics_active() { if(get_index() != 1) { clear(); set_index(1); return var.build<naics_active_t>();} return var.as<naics_active_t>();}
-       naics_active_t const* get_naics_active() const { if(get_index() == 1) { return &var.as<naics_active_t>();} return nullptr; }
-       naics_inactive_t& select_naics_inactive() { if(get_index() != 2) { clear(); set_index(2); return var.build<naics_inactive_t>();} return var.as<naics_inactive_t>();}
-       naics_inactive_t const* get_naics_inactive() const { if(get_index() == 2) { return &var.as<naics_inactive_t>();} return nullptr; }
-       private:
-       void set_index(index_type i) {index = i; base::set();}
-       union union_type
-       {
-               char dummy1[sizeof(naics_active_t)];
-               char dummy2[sizeof(naics_inactive_t)];
-
-       };
-       asn::variant<sizeof(union_type)>        var;
-       index_type      index {0};
-};
-/*
-E-RAB-ID ::= INTEGER (0..15, ...)
-*/
-
-struct E_RAB_ID : asn::integer<>
-{
-       using constraint_t = asn::constraints<true,asn::span<0, 15>>;
-       static constexpr const char* name() {return "E-RAB-ID";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-E-RAB-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct E_RAB_Item_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-E-RAB-Item ::= SEQUENCE {
-       e-RAB-ID                                E-RAB-ID,
-       cause                                           Cause,
-       iE-Extensions                           ProtocolExtensionContainer { {E-RAB-Item-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct E_RAB_Item : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "E-RAB-Item";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct e_RAB_ID_t : E_RAB_ID
-       {
-               static constexpr const char* name() {return "e_RAB_ID_t";}
-               using parent_t = E_RAB_ID;
-
-       };
-       e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;}
-       e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;}
-       struct cause_t : Cause
-       {
-               static constexpr const char* name() {return "cause_t";}
-               using parent_t = Cause;
-
-       };
-       cause_t& ref_cause() {return cause;}
-       cause_t const& ref_cause() const {return cause;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<E_RAB_Item_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<E_RAB_Item_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(e_RAB_ID);
-               v(cause);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(e_RAB_ID);
-               v(cause);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               e_RAB_ID.clear();
-               cause.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       e_RAB_ID_t      e_RAB_ID;
-       cause_t cause;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-E-RAB-ItemIEs  X2AP-PROTOCOL-IES ::= {
-       { ID id-E-RAB-Item       CRITICALITY ignore     TYPE E-RAB-Item         PRESENCE mandatory },
-       ...
-}
-*/
-
-struct E_RAB_ItemIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_IES::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 2; }
-               void clear() {type = 0;}
-               void select_id_E_RAB_Item() { set(id_E_RAB_Item); type=1;}
-               X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(id_E_RAB_Item)) { type = 1; return true; }
-                       else { type = 2; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RAB_Item);} return false;
-                       case 2: type = 2; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_IES::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 2; }
-               void clear() {type = 0;}
-               void select_id_E_RAB_Item() { set(ignore); type=1;}
-               X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(ignore)) { type = 1; return true; }
-                       else { type = 2; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 2: type = 2; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Value_t : asn::typefield<true>
-       {
-               ~Value_t()      {clear();}
-               size_t get_index() const {return type;}
-               E_RAB_Item& select_id_E_RAB_Item() { return set<E_RAB_Item>(1); }
-               E_RAB_Item const* get_id_E_RAB_Item() const { return get<E_RAB_Item>(1); }
-               bool is_unknown() const { return type == 2; }
-               void clear()
-               {
-                       switch(type)
-                       {
-                       case 1: var.destroy<E_RAB_Item>(); break;
-                       }
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-                       v.template operator()<E_RAB_Item>(1);
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: v(select_id_E_RAB_Item()); return true;
-                       case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       switch(type)
-                       {
-                       case 1: v(var.as<E_RAB_Item>()); return true;
-                       }
-                       return false;
-
-               }
-               private:
-               template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
-               template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
-               union union_type
-               {
-                       char dummy1[sizeof(E_RAB_Item)];
-
-               };
-               asn::variant<sizeof(union_type)> var;
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_IES::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 2; }
-               void clear() {type = 0;}
-               void select_id_E_RAB_Item() { set(mandatory); type=1;}
-               X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(mandatory)) { type = 1; return true; }
-                       else { type = 2; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false;
-                       case 2: type = 2; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-QCI ::= INTEGER (0..255)
-*/
-
-struct QCI : asn::integer<>
-{
-       using constraint_t = asn::constraints<false,asn::span<0, 255>>;
-       static constexpr const char* name() {return "QCI";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-ExtendedBitRate        ::= INTEGER (10000000001..4000000000000,...)
-*/
-
-struct ExtendedBitRate : asn::integer<>
-{
-       using constraint_t = asn::constraints<true,asn::span<10000000001, 4000000000000>>;
-       static constexpr const char* name() {return "ExtendedBitRate";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-GBR-QosInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
--- Extension for maximum bitrate > 10Gbps --
-       { ID id-extended-e-RAB-MaximumBitrateDL         CRITICALITY ignore      EXTENSION ExtendedBitRate       PRESENCE optional}|
-       { ID id-extended-e-RAB-MaximumBitrateUL         CRITICALITY ignore      EXTENSION ExtendedBitRate       PRESENCE optional}|
-       { ID id-extended-e-RAB-GuaranteedBitrateDL      CRITICALITY ignore      EXTENSION ExtendedBitRate       PRESENCE optional}|
-       { ID id-extended-e-RAB-GuaranteedBitrateUL      CRITICALITY ignore      EXTENSION ExtendedBitRate       PRESENCE optional},
-       ...
-}
-*/
-
-struct GBR_QosInformation_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 5; }
-               void clear() {type = 0;}
-               void select_id_extended_e_RAB_MaximumBitrateDL() { set(id_extended_e_RAB_MaximumBitrateDL); type=1;}
-               void select_id_extended_e_RAB_MaximumBitrateUL() { set(id_extended_e_RAB_MaximumBitrateUL); type=2;}
-               void select_id_extended_e_RAB_GuaranteedBitrateDL() { set(id_extended_e_RAB_GuaranteedBitrateDL); type=3;}
-               void select_id_extended_e_RAB_GuaranteedBitrateUL() { set(id_extended_e_RAB_GuaranteedBitrateUL); type=4;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(id_extended_e_RAB_MaximumBitrateDL)) { type = 1; return true; }
-                       else if(equal(id_extended_e_RAB_MaximumBitrateUL)) { type = 2; return true; }
-                       else if(equal(id_extended_e_RAB_GuaranteedBitrateDL)) { type = 3; return true; }
-                       else if(equal(id_extended_e_RAB_GuaranteedBitrateUL)) { type = 4; return true; }
-                       else { type = 5; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(id_extended_e_RAB_MaximumBitrateDL);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(id_extended_e_RAB_MaximumBitrateUL);} return false;
-                       case 3: type = 3; if(v(ref_nested())) { return equal(id_extended_e_RAB_GuaranteedBitrateDL);} return false;
-                       case 4: type = 4; if(v(ref_nested())) { return equal(id_extended_e_RAB_GuaranteedBitrateUL);} return false;
-                       case 5: type = 5; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 5; }
-               void clear() {type = 0;}
-               void select_id_extended_e_RAB_MaximumBitrateDL() { set(ignore); type=1;}
-               void select_id_extended_e_RAB_MaximumBitrateUL() { set(ignore); type=2;}
-               void select_id_extended_e_RAB_GuaranteedBitrateDL() { set(ignore); type=3;}
-               void select_id_extended_e_RAB_GuaranteedBitrateUL() { set(ignore); type=4;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(ignore)) { type = 1; return true; }
-                       else if(equal(ignore)) { type = 2; return true; }
-                       else if(equal(ignore)) { type = 3; return true; }
-                       else if(equal(ignore)) { type = 4; return true; }
-                       else { type = 5; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 5: type = 5; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               ExtendedBitRate& select_id_extended_e_RAB_MaximumBitrateDL() { return set<ExtendedBitRate>(1); }
-               ExtendedBitRate const* get_id_extended_e_RAB_MaximumBitrateDL() const { return get<ExtendedBitRate>(1); }
-               ExtendedBitRate& select_id_extended_e_RAB_MaximumBitrateUL() { return set<ExtendedBitRate>(2); }
-               ExtendedBitRate const* get_id_extended_e_RAB_MaximumBitrateUL() const { return get<ExtendedBitRate>(2); }
-               ExtendedBitRate& select_id_extended_e_RAB_GuaranteedBitrateDL() { return set<ExtendedBitRate>(3); }
-               ExtendedBitRate const* get_id_extended_e_RAB_GuaranteedBitrateDL() const { return get<ExtendedBitRate>(3); }
-               ExtendedBitRate& select_id_extended_e_RAB_GuaranteedBitrateUL() { return set<ExtendedBitRate>(4); }
-               ExtendedBitRate const* get_id_extended_e_RAB_GuaranteedBitrateUL() const { return get<ExtendedBitRate>(4); }
-               bool is_unknown() const { return type == 5; }
-               void clear()
-               {
-                       switch(type)
-                       {
-                       case 1: var.destroy<ExtendedBitRate>(); break;
-                       case 2: var.destroy<ExtendedBitRate>(); break;
-                       case 3: var.destroy<ExtendedBitRate>(); break;
-                       case 4: var.destroy<ExtendedBitRate>(); break;
-                       }
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-                       v.template operator()<ExtendedBitRate>(1);
-                       v.template operator()<ExtendedBitRate>(2);
-                       v.template operator()<ExtendedBitRate>(3);
-                       v.template operator()<ExtendedBitRate>(4);
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: v(select_id_extended_e_RAB_MaximumBitrateDL()); return true;
-                       case 2: v(select_id_extended_e_RAB_MaximumBitrateUL()); return true;
-                       case 3: v(select_id_extended_e_RAB_GuaranteedBitrateDL()); return true;
-                       case 4: v(select_id_extended_e_RAB_GuaranteedBitrateUL()); return true;
-                       case 5: if(type != 5) {clear(); asn::base::set();} type = 5; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       switch(type)
-                       {
-                       case 1: v(var.as<ExtendedBitRate>()); return true;
-                       case 2: v(var.as<ExtendedBitRate>()); return true;
-                       case 3: v(var.as<ExtendedBitRate>()); return true;
-                       case 4: v(var.as<ExtendedBitRate>()); return true;
-                       }
-                       return false;
-
-               }
-               private:
-               template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
-               template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
-               union union_type
-               {
-                       char dummy1[sizeof(ExtendedBitRate)];
-
-               };
-               asn::variant<sizeof(union_type)> var;
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 5; }
-               void clear() {type = 0;}
-               void select_id_extended_e_RAB_MaximumBitrateDL() { set(optional); type=1;}
-               void select_id_extended_e_RAB_MaximumBitrateUL() { set(optional); type=2;}
-               void select_id_extended_e_RAB_GuaranteedBitrateDL() { set(optional); type=3;}
-               void select_id_extended_e_RAB_GuaranteedBitrateUL() { set(optional); type=4;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(optional)) { type = 1; return true; }
-                       else if(equal(optional)) { type = 2; return true; }
-                       else if(equal(optional)) { type = 3; return true; }
-                       else if(equal(optional)) { type = 4; return true; }
-                       else { type = 5; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 5: type = 5; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-GBR-QosInformation ::= SEQUENCE {
-       e-RAB-MaximumBitrateDL                  BitRate,
-       e-RAB-MaximumBitrateUL                  BitRate,
-       e-RAB-GuaranteedBitrateDL               BitRate,
-       e-RAB-GuaranteedBitrateUL               BitRate,
-       iE-Extensions                                   ProtocolExtensionContainer { {GBR-QosInformation-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct GBR_QosInformation : asn::sequence<5, 0, true, 1>
-{
-       static constexpr const char* name() {return "GBR-QosInformation";}
-       using parent_t = asn::sequence<5, 0, true, 1>;
-       struct e_RAB_MaximumBitrateDL_t : BitRate
-       {
-               static constexpr const char* name() {return "e_RAB_MaximumBitrateDL_t";}
-               using parent_t = BitRate;
-
-       };
-       e_RAB_MaximumBitrateDL_t& ref_e_RAB_MaximumBitrateDL() {return e_RAB_MaximumBitrateDL;}
-       e_RAB_MaximumBitrateDL_t const& ref_e_RAB_MaximumBitrateDL() const {return e_RAB_MaximumBitrateDL;}
-       struct e_RAB_MaximumBitrateUL_t : BitRate
-       {
-               static constexpr const char* name() {return "e_RAB_MaximumBitrateUL_t";}
-               using parent_t = BitRate;
-
-       };
-       e_RAB_MaximumBitrateUL_t& ref_e_RAB_MaximumBitrateUL() {return e_RAB_MaximumBitrateUL;}
-       e_RAB_MaximumBitrateUL_t const& ref_e_RAB_MaximumBitrateUL() const {return e_RAB_MaximumBitrateUL;}
-       struct e_RAB_GuaranteedBitrateDL_t : BitRate
-       {
-               static constexpr const char* name() {return "e_RAB_GuaranteedBitrateDL_t";}
-               using parent_t = BitRate;
-
-       };
-       e_RAB_GuaranteedBitrateDL_t& ref_e_RAB_GuaranteedBitrateDL() {return e_RAB_GuaranteedBitrateDL;}
-       e_RAB_GuaranteedBitrateDL_t const& ref_e_RAB_GuaranteedBitrateDL() const {return e_RAB_GuaranteedBitrateDL;}
-       struct e_RAB_GuaranteedBitrateUL_t : BitRate
-       {
-               static constexpr const char* name() {return "e_RAB_GuaranteedBitrateUL_t";}
-               using parent_t = BitRate;
-
-       };
-       e_RAB_GuaranteedBitrateUL_t& ref_e_RAB_GuaranteedBitrateUL() {return e_RAB_GuaranteedBitrateUL;}
-       e_RAB_GuaranteedBitrateUL_t const& ref_e_RAB_GuaranteedBitrateUL() const {return e_RAB_GuaranteedBitrateUL;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<GBR_QosInformation_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<GBR_QosInformation_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(e_RAB_MaximumBitrateDL);
-               v(e_RAB_MaximumBitrateUL);
-               v(e_RAB_GuaranteedBitrateDL);
-               v(e_RAB_GuaranteedBitrateUL);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(e_RAB_MaximumBitrateDL);
-               v(e_RAB_MaximumBitrateUL);
-               v(e_RAB_GuaranteedBitrateDL);
-               v(e_RAB_GuaranteedBitrateUL);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               e_RAB_MaximumBitrateDL.clear();
-               e_RAB_MaximumBitrateUL.clear();
-               e_RAB_GuaranteedBitrateDL.clear();
-               e_RAB_GuaranteedBitrateUL.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       e_RAB_MaximumBitrateDL_t        e_RAB_MaximumBitrateDL;
-       e_RAB_MaximumBitrateUL_t        e_RAB_MaximumBitrateUL;
-       e_RAB_GuaranteedBitrateDL_t     e_RAB_GuaranteedBitrateDL;
-       e_RAB_GuaranteedBitrateUL_t     e_RAB_GuaranteedBitrateUL;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-Packet-LossRate        ::= INTEGER(0..1000)
-*/
-
-struct Packet_LossRate : asn::integer<>
-{
-       using constraint_t = asn::constraints<false,asn::span<0, 1000>>;
-       static constexpr const char* name() {return "Packet-LossRate";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-E-RAB-Level-QoS-Parameters-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
--- Extended for introduction of downlink and uplink packet loss rate for enhanced Voice performance –
-       { ID id-DownlinkPacketLossRate                  CRITICALITY ignore      EXTENSION Packet-LossRate               PRESENCE optional}|
-       { ID id-UplinkPacketLossRate                    CRITICALITY ignore      EXTENSION Packet-LossRate               PRESENCE optional},
-       ...
-}
-*/
-
-struct E_RAB_Level_QoS_Parameters_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 3; }
-               void clear() {type = 0;}
-               void select_id_DownlinkPacketLossRate() { set(id_DownlinkPacketLossRate); type=1;}
-               void select_id_UplinkPacketLossRate() { set(id_UplinkPacketLossRate); type=2;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(id_DownlinkPacketLossRate)) { type = 1; return true; }
-                       else if(equal(id_UplinkPacketLossRate)) { type = 2; return true; }
-                       else { type = 3; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(id_DownlinkPacketLossRate);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(id_UplinkPacketLossRate);} return false;
-                       case 3: type = 3; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 3; }
-               void clear() {type = 0;}
-               void select_id_DownlinkPacketLossRate() { set(ignore); type=1;}
-               void select_id_UplinkPacketLossRate() { set(ignore); type=2;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(ignore)) { type = 1; return true; }
-                       else if(equal(ignore)) { type = 2; return true; }
-                       else { type = 3; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 3: type = 3; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               Packet_LossRate& select_id_DownlinkPacketLossRate() { return set<Packet_LossRate>(1); }
-               Packet_LossRate const* get_id_DownlinkPacketLossRate() const { return get<Packet_LossRate>(1); }
-               Packet_LossRate& select_id_UplinkPacketLossRate() { return set<Packet_LossRate>(2); }
-               Packet_LossRate const* get_id_UplinkPacketLossRate() const { return get<Packet_LossRate>(2); }
-               bool is_unknown() const { return type == 3; }
-               void clear()
-               {
-                       switch(type)
-                       {
-                       case 1: var.destroy<Packet_LossRate>(); break;
-                       case 2: var.destroy<Packet_LossRate>(); break;
-                       }
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-                       v.template operator()<Packet_LossRate>(1);
-                       v.template operator()<Packet_LossRate>(2);
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: v(select_id_DownlinkPacketLossRate()); return true;
-                       case 2: v(select_id_UplinkPacketLossRate()); return true;
-                       case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       switch(type)
-                       {
-                       case 1: v(var.as<Packet_LossRate>()); return true;
-                       case 2: v(var.as<Packet_LossRate>()); return true;
-                       }
-                       return false;
-
-               }
-               private:
-               template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
-               template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
-               union union_type
-               {
-                       char dummy1[sizeof(Packet_LossRate)];
-
-               };
-               asn::variant<sizeof(union_type)> var;
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 3; }
-               void clear() {type = 0;}
-               void select_id_DownlinkPacketLossRate() { set(optional); type=1;}
-               void select_id_UplinkPacketLossRate() { set(optional); type=2;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(optional)) { type = 1; return true; }
-                       else if(equal(optional)) { type = 2; return true; }
-                       else { type = 3; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 3: type = 3; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-E-RAB-Level-QoS-Parameters ::= SEQUENCE {
-       qCI                                                             QCI,
-       allocationAndRetentionPriority  AllocationAndRetentionPriority,
-       gbrQosInformation                               GBR-QosInformation                                                                                                      OPTIONAL,
-       iE-Extensions                                   ProtocolExtensionContainer { {E-RAB-Level-QoS-Parameters-ExtIEs} }      OPTIONAL,
-       ...
-}
-*/
-
-struct E_RAB_Level_QoS_Parameters : asn::sequence<4, 0, true, 2>
-{
-       static constexpr const char* name() {return "E-RAB-Level-QoS-Parameters";}
-       using parent_t = asn::sequence<4, 0, true, 2>;
-       struct qCI_t : QCI
-       {
-               static constexpr const char* name() {return "qCI_t";}
-               using parent_t = QCI;
-
-       };
-       qCI_t& ref_qCI() {return qCI;}
-       qCI_t const& ref_qCI() const {return qCI;}
-       struct allocationAndRetentionPriority_t : AllocationAndRetentionPriority
-       {
-               static constexpr const char* name() {return "allocationAndRetentionPriority_t";}
-               using parent_t = AllocationAndRetentionPriority;
-
-       };
-       allocationAndRetentionPriority_t& ref_allocationAndRetentionPriority() {return allocationAndRetentionPriority;}
-       allocationAndRetentionPriority_t const& ref_allocationAndRetentionPriority() const {return allocationAndRetentionPriority;}
-       struct gbrQosInformation_t : GBR_QosInformation
-       {
-               static constexpr const char* name() {return "gbrQosInformation_t";}
-               using parent_t = GBR_QosInformation;
-               static constexpr bool optional = true;
-
-       };
-       gbrQosInformation_t& set_gbrQosInformation() { gbrQosInformation.setpresent(true); return gbrQosInformation;}
-       gbrQosInformation_t const* get_gbrQosInformation() const {return gbrQosInformation.is_valid() ? &gbrQosInformation : nullptr;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<E_RAB_Level_QoS_Parameters_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<E_RAB_Level_QoS_Parameters_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(qCI);
-               v(allocationAndRetentionPriority);
-               v(gbrQosInformation);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(qCI);
-               v(allocationAndRetentionPriority);
-               v(gbrQosInformation);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               qCI.clear();
-               allocationAndRetentionPriority.clear();
-               gbrQosInformation.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       qCI_t   qCI;
-       allocationAndRetentionPriority_t        allocationAndRetentionPriority;
-       gbrQosInformation_t     gbrQosInformation;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-E-RAB-List ::= SEQUENCE (SIZE(1.. maxnoofBearers)) OF ProtocolIE-Single-Container { {E-RAB-ItemIEs} }
-*/
-
-struct E_RAB_List_elm : ProtocolIE_Single_Container<E_RAB_ItemIEs>
-{
-       static constexpr const char* name() {return "E_RAB_List_elm";}
-       using parent_t = ProtocolIE_Single_Container<E_RAB_ItemIEs>;
-
-};
-struct E_RAB_List : asn::sequenceof<E_RAB_List_elm>
-{
-       static constexpr const char* name() {return "E-RAB-List";}
-       using parent_t = asn::sequenceof<E_RAB_List_elm>;
-       using constraint_t = asn::constraints<false,asn::span<1,  maxnoofBearers >>;
-
-};
-/*
-E-RABUsageReport-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct E_RABUsageReport_Item_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-E-RABUsageReport-Item ::= SEQUENCE {
-       startTimeStamp                          OCTET STRING (SIZE(4)),
-       endTimeStamp                                    OCTET STRING (SIZE(4)),
-       usageCountUL                                    INTEGER (0..4294967295),
-       usageCountDL                                    INTEGER (0..4294967295),
-       iE-Extensions                           ProtocolExtensionContainer { {E-RABUsageReport-Item-ExtIEs} } OPTIONAL,
-...
-}
-*/
-
-struct E_RABUsageReport_Item : asn::sequence<5, 0, true, 1>
-{
-       static constexpr const char* name() {return "E-RABUsageReport-Item";}
-       using parent_t = asn::sequence<5, 0, true, 1>;
-       struct startTimeStamp_t : asn::ostring<>
-       {
-               using constraint_t = asn::constraints<false,asn::one<4>>;
-               static constexpr const char* name() {return "startTimeStamp_t";}
-               using parent_t = asn::ostring<>;
-
-       };
-
-       startTimeStamp_t& ref_startTimeStamp() {return startTimeStamp;}
-       startTimeStamp_t const& ref_startTimeStamp() const {return startTimeStamp;}
-       struct endTimeStamp_t : asn::ostring<>
-       {
-               using constraint_t = asn::constraints<false,asn::one<4>>;
-               static constexpr const char* name() {return "endTimeStamp_t";}
-               using parent_t = asn::ostring<>;
-
-       };
-
-       endTimeStamp_t& ref_endTimeStamp() {return endTimeStamp;}
-       endTimeStamp_t const& ref_endTimeStamp() const {return endTimeStamp;}
-       struct usageCountUL_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<false,asn::span<0, 4294967295>>;
-               static constexpr const char* name() {return "usageCountUL_t";}
-               using parent_t = asn::integer<>;
-
-       };
-
-       usageCountUL_t& ref_usageCountUL() {return usageCountUL;}
-       usageCountUL_t const& ref_usageCountUL() const {return usageCountUL;}
-       struct usageCountDL_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<false,asn::span<0, 4294967295>>;
-               static constexpr const char* name() {return "usageCountDL_t";}
-               using parent_t = asn::integer<>;
-
-       };
-
-       usageCountDL_t& ref_usageCountDL() {return usageCountDL;}
-       usageCountDL_t const& ref_usageCountDL() const {return usageCountDL;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<E_RABUsageReport_Item_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<E_RABUsageReport_Item_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(startTimeStamp);
-               v(endTimeStamp);
-               v(usageCountUL);
-               v(usageCountDL);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(startTimeStamp);
-               v(endTimeStamp);
-               v(usageCountUL);
-               v(usageCountDL);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               startTimeStamp.clear();
-               endTimeStamp.clear();
-               usageCountUL.clear();
-               usageCountDL.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       startTimeStamp_t        startTimeStamp;
-       endTimeStamp_t  endTimeStamp;
-       usageCountUL_t  usageCountUL;
-       usageCountDL_t  usageCountDL;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-E-RABUsageReport-ItemIEs X2AP-PROTOCOL-IES ::= {
-       { ID id-E-RABUsageReport-Item    CRITICALITY ignore     TYPE E-RABUsageReport-Item      PRESENCE mandatory },
-       ...
-}
-*/
-
-struct E_RABUsageReport_ItemIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_IES::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 2; }
-               void clear() {type = 0;}
-               void select_id_E_RABUsageReport_Item() { set(id_E_RABUsageReport_Item); type=1;}
-               X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(id_E_RABUsageReport_Item)) { type = 1; return true; }
-                       else { type = 2; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(id_E_RABUsageReport_Item);} return false;
-                       case 2: type = 2; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_IES::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 2; }
-               void clear() {type = 0;}
-               void select_id_E_RABUsageReport_Item() { set(ignore); type=1;}
-               X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(ignore)) { type = 1; return true; }
-                       else { type = 2; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 2: type = 2; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Value_t : asn::typefield<true>
-       {
-               ~Value_t()      {clear();}
-               size_t get_index() const {return type;}
-               E_RABUsageReport_Item& select_id_E_RABUsageReport_Item() { return set<E_RABUsageReport_Item>(1); }
-               E_RABUsageReport_Item const* get_id_E_RABUsageReport_Item() const { return get<E_RABUsageReport_Item>(1); }
-               bool is_unknown() const { return type == 2; }
-               void clear()
-               {
-                       switch(type)
-                       {
-                       case 1: var.destroy<E_RABUsageReport_Item>(); break;
-                       }
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-                       v.template operator()<E_RABUsageReport_Item>(1);
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: v(select_id_E_RABUsageReport_Item()); return true;
-                       case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       switch(type)
-                       {
-                       case 1: v(var.as<E_RABUsageReport_Item>()); return true;
-                       }
-                       return false;
-
-               }
-               private:
-               template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
-               template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
-               union union_type
-               {
-                       char dummy1[sizeof(E_RABUsageReport_Item)];
-
-               };
-               asn::variant<sizeof(union_type)> var;
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_IES::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 2; }
-               void clear() {type = 0;}
-               void select_id_E_RABUsageReport_Item() { set(mandatory); type=1;}
-               X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(mandatory)) { type = 1; return true; }
-                       else { type = 2; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false;
-                       case 2: type = 2; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-E-RABUsageReportList ::= SEQUENCE (SIZE(1..maxnooftimeperiods)) OF ProtocolIE-Single-Container { {E-RABUsageReport-ItemIEs} }
-*/
-
-struct E_RABUsageReportList_elm : ProtocolIE_Single_Container<E_RABUsageReport_ItemIEs>
-{
-       static constexpr const char* name() {return "E_RABUsageReportList_elm";}
-       using parent_t = ProtocolIE_Single_Container<E_RABUsageReport_ItemIEs>;
-
-};
-struct E_RABUsageReportList : asn::sequenceof<E_RABUsageReportList_elm>
-{
-       static constexpr const char* name() {return "E-RABUsageReportList";}
-       using parent_t = asn::sequenceof<E_RABUsageReportList_elm>;
-       using constraint_t = asn::constraints<false,asn::span<1,  maxnooftimeperiods >>;
-
-};
-/*
-EARFCN ::= INTEGER (0..maxEARFCN)
-*/
-
-struct EARFCN : asn::integer<>
-{
-       using constraint_t = asn::constraints<false,asn::span<0,  maxEARFCN >>;
-       static constexpr const char* name() {return "EARFCN";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-EARFCNExtension ::= INTEGER(maxEARFCNPlusOne..newmaxEARFCN, ...)
-*/
-
-struct EARFCNExtension : asn::integer<>
-{
-       using constraint_t = asn::constraints<true,asn::span< maxEARFCNPlusOne ,  newmaxEARFCN >>;
-       static constexpr const char* name() {return "EARFCNExtension";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-EN-DC-ResourceConfigurationExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct EN_DC_ResourceConfigurationExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-EN-DC-ResourceConfiguration ::= SEQUENCE {
-       pDCPatSgNB              ENUMERATED {present, not-present, ...},
-       mCGresources    ENUMERATED {present, not-present, ...},
-       sCGresources    ENUMERATED {present, not-present, ...},
-       iE-Extensions                                   ProtocolExtensionContainer { {EN-DC-ResourceConfigurationExtIEs} }      OPTIONAL,
-       ...
-}
-*/
-
-struct EN_DC_ResourceConfiguration : asn::sequence<4, 0, true, 1>
-{
-       static constexpr const char* name() {return "EN-DC-ResourceConfiguration";}
-       using parent_t = asn::sequence<4, 0, true, 1>;
-       struct pDCPatSgNB_t : asn::enumerated<2, 0, true>
-       {
-               static constexpr const char* name() {return "pDCPatSgNB_t";}
-               using parent_t = asn::enumerated<2, 0, true>;
-               typedef enum {
-                       present
-                       ,not_present
-               } index_t;
-
-       };
-
-       pDCPatSgNB_t& ref_pDCPatSgNB() {return pDCPatSgNB;}
-       pDCPatSgNB_t const& ref_pDCPatSgNB() const {return pDCPatSgNB;}
-       struct mCGresources_t : asn::enumerated<2, 0, true>
-       {
-               static constexpr const char* name() {return "mCGresources_t";}
-               using parent_t = asn::enumerated<2, 0, true>;
-               typedef enum {
-                       present
-                       ,not_present
-               } index_t;
-
-       };
-
-       mCGresources_t& ref_mCGresources() {return mCGresources;}
-       mCGresources_t const& ref_mCGresources() const {return mCGresources;}
-       struct sCGresources_t : asn::enumerated<2, 0, true>
-       {
-               static constexpr const char* name() {return "sCGresources_t";}
-               using parent_t = asn::enumerated<2, 0, true>;
-               typedef enum {
-                       present
-                       ,not_present
-               } index_t;
-
-       };
-
-       sCGresources_t& ref_sCGresources() {return sCGresources;}
-       sCGresources_t const& ref_sCGresources() const {return sCGresources;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<EN_DC_ResourceConfigurationExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<EN_DC_ResourceConfigurationExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(pDCPatSgNB);
-               v(mCGresources);
-               v(sCGresources);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(pDCPatSgNB);
-               v(mCGresources);
-               v(sCGresources);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               pDCPatSgNB.clear();
-               mCGresources.clear();
-               sCGresources.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       pDCPatSgNB_t    pDCPatSgNB;
-       mCGresources_t  mCGresources;
-       sCGresources_t  sCGresources;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-ENB-ID ::= CHOICE {
-       macro-eNB-ID    BIT STRING (SIZE (20)),
-       home-eNB-ID             BIT STRING (SIZE (28)),
-       ... ,
-       short-Macro-eNB-ID              BIT STRING (SIZE(18)),
-       long-Macro-eNB-ID               BIT STRING (SIZE(21))
-}
-*/
-
-struct ENB_ID : asn::choice<4, 2, true>
-{
-       static constexpr const char* name() {return "ENB-ID";}
-       using parent_t = asn::choice<4, 2, true>;
-       index_type get_index() const {return index;}
-       bool is_unknown() const {return index == 5;}
-       void set_unknown() { set_index(5);  }
-       ~ENB_ID() {clear();}
-       struct macro_eNB_ID_t : asn::bstring<>
-       {
-               using constraint_t = asn::constraints<false,asn::one<20>>;
-               static constexpr const char* name() {return "macro_eNB_ID_t";}
-               using parent_t = asn::bstring<>;
-
-       };
-
-       struct home_eNB_ID_t : asn::bstring<>
-       {
-               using constraint_t = asn::constraints<false,asn::one<28>>;
-               static constexpr const char* name() {return "home_eNB_ID_t";}
-               using parent_t = asn::bstring<>;
-
-       };
-
-       struct short_Macro_eNB_ID_t : asn::bstring<>
-       {
-               using constraint_t = asn::constraints<false,asn::one<18>>;
-               static constexpr const char* name() {return "short_Macro_eNB_ID_t";}
-               using parent_t = asn::bstring<>;
-
-       };
-
-       struct long_Macro_eNB_ID_t : asn::bstring<>
-       {
-               using constraint_t = asn::constraints<false,asn::one<21>>;
-               static constexpr const char* name() {return "long_Macro_eNB_ID_t";}
-               using parent_t = asn::bstring<>;
-
-       };
-
-       void clear()
-       {
-               switch(get_index())
-               {
-               case 1: var.destroy<macro_eNB_ID_t>(); break;
-               case 2: var.destroy<home_eNB_ID_t>(); break;
-               case 3: var.destroy<short_Macro_eNB_ID_t>(); break;
-               case 4: var.destroy<long_Macro_eNB_ID_t>(); break;
-               }
-               index = 0;
-               base::clear();
-       }
-       template<typename V> bool decode(size_t idx, V& v)
-       {
-               clear();
-               switch(idx)
-               {
-               case 1: set_index(1); return v(var.build<macro_eNB_ID_t>());
-               case 2: set_index(2); return v(var.build<home_eNB_ID_t>());
-               case 3: set_index(3); return v(var.build<short_Macro_eNB_ID_t>());
-               case 4: set_index(4); return v(var.build<long_Macro_eNB_ID_t>());
-               }
-               return false;
-
-       }
-       template<typename V> bool encode(V& v) const
-       {
-               switch(get_index())
-               {
-               case 1: return v(var.as<macro_eNB_ID_t>());
-               case 2: return v(var.as<home_eNB_ID_t>());
-               case 3: return v(var.as<short_Macro_eNB_ID_t>());
-               case 4: return v(var.as<long_Macro_eNB_ID_t>());
-               }
-               return false;
-       }
-       template<typename V> static inline void enumerate(V& v)
-       {
-               v.template operator()<macro_eNB_ID_t>(1);
-               v.template operator()<home_eNB_ID_t>(2);
-               v.template operator()<short_Macro_eNB_ID_t>(3);
-               v.template operator()<long_Macro_eNB_ID_t>(4);
-
-       }
-       macro_eNB_ID_t& select_macro_eNB_ID() { if(get_index() != 1) { clear(); set_index(1); return var.build<macro_eNB_ID_t>();} return var.as<macro_eNB_ID_t>();}
-       macro_eNB_ID_t const* get_macro_eNB_ID() const { if(get_index() == 1) { return &var.as<macro_eNB_ID_t>();} return nullptr; }
-       home_eNB_ID_t& select_home_eNB_ID() { if(get_index() != 2) { clear(); set_index(2); return var.build<home_eNB_ID_t>();} return var.as<home_eNB_ID_t>();}
-       home_eNB_ID_t const* get_home_eNB_ID() const { if(get_index() == 2) { return &var.as<home_eNB_ID_t>();} return nullptr; }
-       short_Macro_eNB_ID_t& select_short_Macro_eNB_ID() { if(get_index() != 3) { clear(); set_index(3); return var.build<short_Macro_eNB_ID_t>();} return var.as<short_Macro_eNB_ID_t>();}
-       short_Macro_eNB_ID_t const* get_short_Macro_eNB_ID() const { if(get_index() == 3) { return &var.as<short_Macro_eNB_ID_t>();} return nullptr; }
-       long_Macro_eNB_ID_t& select_long_Macro_eNB_ID() { if(get_index() != 4) { clear(); set_index(4); return var.build<long_Macro_eNB_ID_t>();} return var.as<long_Macro_eNB_ID_t>();}
-       long_Macro_eNB_ID_t const* get_long_Macro_eNB_ID() const { if(get_index() == 4) { return &var.as<long_Macro_eNB_ID_t>();} return nullptr; }
-       private:
-       void set_index(index_type i) {index = i; base::set();}
-       union union_type
-       {
-               char dummy1[sizeof(macro_eNB_ID_t)];
-               char dummy2[sizeof(home_eNB_ID_t)];
-               char dummy3[sizeof(short_Macro_eNB_ID_t)];
-               char dummy4[sizeof(long_Macro_eNB_ID_t)];
-
-       };
-       asn::variant<sizeof(union_type)>        var;
-       index_type      index {0};
-};
-/*
-EPLMNs ::= SEQUENCE (SIZE(1..maxnoofEPLMNs)) OF PLMN-Identity
-*/
-
-struct EPLMNs_elm : PLMN_Identity
-{
-       static constexpr const char* name() {return "EPLMNs_elm";}
-       using parent_t = PLMN_Identity;
-
-};
-struct EPLMNs : asn::sequenceof<EPLMNs_elm>
-{
-       static constexpr const char* name() {return "EPLMNs";}
-       using parent_t = asn::sequenceof<EPLMNs_elm>;
-       using constraint_t = asn::constraints<false,asn::span<1,  maxnoofEPLMNs >>;
-
-};
-/*
-UserPlaneTrafficActivityReport ::= ENUMERATED {inactive, re-activated, ...}
-*/
-
-struct UserPlaneTrafficActivityReport : asn::enumerated<2, 0, true>
-{
-       static constexpr const char* name() {return "UserPlaneTrafficActivityReport";}
-       using parent_t = asn::enumerated<2, 0, true>;
-       typedef enum {
-               inactive
-               ,re_activated
-       } index_t;
-
-};
-
-/*
-ERABActivityNotifyItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct ERABActivityNotifyItem_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-ERABActivityNotifyItem ::= SEQUENCE {
-       e-RAB-ID                                                E-RAB-ID,
-       activityReport                                  UserPlaneTrafficActivityReport,
-       iE-Extensions                                   ProtocolExtensionContainer { {ERABActivityNotifyItem-ExtIEs} }  OPTIONAL,
-       ...
-}
-*/
-
-struct ERABActivityNotifyItem : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "ERABActivityNotifyItem";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct e_RAB_ID_t : E_RAB_ID
-       {
-               static constexpr const char* name() {return "e_RAB_ID_t";}
-               using parent_t = E_RAB_ID;
-
-       };
-       e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;}
-       e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;}
-       struct activityReport_t : UserPlaneTrafficActivityReport
-       {
-               static constexpr const char* name() {return "activityReport_t";}
-               using parent_t = UserPlaneTrafficActivityReport;
-
-       };
-       activityReport_t& ref_activityReport() {return activityReport;}
-       activityReport_t const& ref_activityReport() const {return activityReport;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<ERABActivityNotifyItem_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<ERABActivityNotifyItem_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(e_RAB_ID);
-               v(activityReport);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(e_RAB_ID);
-               v(activityReport);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               e_RAB_ID.clear();
-               activityReport.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       e_RAB_ID_t      e_RAB_ID;
-       activityReport_t        activityReport;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-ERABActivityNotifyItemList ::= SEQUENCE (SIZE (0..maxnoofBearers)) OF ERABActivityNotifyItem
-*/
-
-struct ERABActivityNotifyItemList_elm : ERABActivityNotifyItem
-{
-       static constexpr const char* name() {return "ERABActivityNotifyItemList_elm";}
-       using parent_t = ERABActivityNotifyItem;
-
-};
-struct ERABActivityNotifyItemList : asn::sequenceof<ERABActivityNotifyItemList_elm>
-{
-       static constexpr const char* name() {return "ERABActivityNotifyItemList";}
-       using parent_t = asn::sequenceof<ERABActivityNotifyItemList_elm>;
-       using constraint_t = asn::constraints<false,asn::span<0,  maxnoofBearers >>;
-
-};
-/*
-Transmission-Bandwidth ::= ENUMERATED {
-               bw6,
-               bw15,
-               bw25,
-               bw50,
-               bw75,
-               bw100,
-               ...,
-               bw1
-}
-*/
-
-struct Transmission_Bandwidth : asn::enumerated<7, 1, true>
-{
-       static constexpr const char* name() {return "Transmission-Bandwidth";}
-       using parent_t = asn::enumerated<7, 1, true>;
-       typedef enum {
-               bw6
-               ,bw15
-               ,bw25
-               ,bw50
-               ,bw75
-               ,bw100
-               ,bw1
-       } index_t;
-
-};
-
-/*
-OffsetOfNbiotChannelNumberToEARFCN ::= ENUMERATED {
-               minusTen,
-               minusNine,
-               minusEight,
-               minusSeven,
-               minusSix,
-               minusFive,
-               minusFour,
-               minusThree,
-               minusTwo,
-               minusOne,
-               minusZeroDotFive,
-               zero,
-               one,
-               two,
-               three,
-               four,
-               five,
-               six,
-               seven,
-               eight,
-               nine,
-               ...
-}
-*/
-
-struct OffsetOfNbiotChannelNumberToEARFCN : asn::enumerated<21, 0, true>
-{
-       static constexpr const char* name() {return "OffsetOfNbiotChannelNumberToEARFCN";}
-       using parent_t = asn::enumerated<21, 0, true>;
-       typedef enum {
-               minusTen
-               ,minusNine
-               ,minusEight
-               ,minusSeven
-               ,minusSix
-               ,minusFive
-               ,minusFour
-               ,minusThree
-               ,minusTwo
-               ,minusOne
-               ,minusZeroDotFive
-               ,zero
-               ,one
-               ,two
-               ,three
-               ,four
-               ,five
-               ,six
-               ,seven
-               ,eight
-               ,nine
-       } index_t;
-
-};
-
-/*
-NRS-NSSS-PowerOffset ::= ENUMERATED { minusThree, zero, three, ...}
-*/
-
-struct NRS_NSSS_PowerOffset : asn::enumerated<3, 0, true>
-{
-       static constexpr const char* name() {return "NRS-NSSS-PowerOffset";}
-       using parent_t = asn::enumerated<3, 0, true>;
-       typedef enum {
-               minusThree
-               ,zero
-               ,three
-       } index_t;
-
-};
-
-/*
-NSSS-NumOccasionDifferentPrecoder ::= ENUMERATED { two, four, eight, ...}
-*/
-
-struct NSSS_NumOccasionDifferentPrecoder : asn::enumerated<3, 0, true>
-{
-       static constexpr const char* name() {return "NSSS-NumOccasionDifferentPrecoder";}
-       using parent_t = asn::enumerated<3, 0, true>;
-       typedef enum {
-               two
-               ,four
-               ,eight
-       } index_t;
-
-};
-
-/*
-FDD-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       { ID id-UL-EARFCNExtension                                              CRITICALITY reject      EXTENSION EARFCNExtension                                                                       PRESENCE optional}|
-       { ID id-DL-EARFCNExtension                                              CRITICALITY reject      EXTENSION EARFCNExtension                                                                       PRESENCE optional}|
-       { ID id-OffsetOfNbiotChannelNumberToDL-EARFCN   CRITICALITY reject      EXTENSION OffsetOfNbiotChannelNumberToEARFCN            PRESENCE optional}|
-       { ID id-OffsetOfNbiotChannelNumberToUL-EARFCN   CRITICALITY reject      EXTENSION OffsetOfNbiotChannelNumberToEARFCN            PRESENCE optional}|
-       { ID id-NRS-NSSS-PowerOffset                                    CRITICALITY ignore      EXTENSION NRS-NSSS-PowerOffset                                                  PRESENCE optional}|
-       { ID id-NSSS-NumOccasionDifferentPrecoder               CRITICALITY ignore      EXTENSION NSSS-NumOccasionDifferentPrecoder                     PRESENCE optional},
-       ...
-}
-*/
-
-struct FDD_Info_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 7; }
-               void clear() {type = 0;}
-               void select_id_UL_EARFCNExtension() { set(id_UL_EARFCNExtension); type=1;}
-               void select_id_DL_EARFCNExtension() { set(id_DL_EARFCNExtension); type=2;}
-               void select_id_OffsetOfNbiotChannelNumberToDL_EARFCN() { set(id_OffsetOfNbiotChannelNumberToDL_EARFCN); type=3;}
-               void select_id_OffsetOfNbiotChannelNumberToUL_EARFCN() { set(id_OffsetOfNbiotChannelNumberToUL_EARFCN); type=4;}
-               void select_id_NRS_NSSS_PowerOffset() { set(id_NRS_NSSS_PowerOffset); type=5;}
-               void select_id_NSSS_NumOccasionDifferentPrecoder() { set(id_NSSS_NumOccasionDifferentPrecoder); type=6;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(id_UL_EARFCNExtension)) { type = 1; return true; }
-                       else if(equal(id_DL_EARFCNExtension)) { type = 2; return true; }
-                       else if(equal(id_OffsetOfNbiotChannelNumberToDL_EARFCN)) { type = 3; return true; }
-                       else if(equal(id_OffsetOfNbiotChannelNumberToUL_EARFCN)) { type = 4; return true; }
-                       else if(equal(id_NRS_NSSS_PowerOffset)) { type = 5; return true; }
-                       else if(equal(id_NSSS_NumOccasionDifferentPrecoder)) { type = 6; return true; }
-                       else { type = 7; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(id_UL_EARFCNExtension);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(id_DL_EARFCNExtension);} return false;
-                       case 3: type = 3; if(v(ref_nested())) { return equal(id_OffsetOfNbiotChannelNumberToDL_EARFCN);} return false;
-                       case 4: type = 4; if(v(ref_nested())) { return equal(id_OffsetOfNbiotChannelNumberToUL_EARFCN);} return false;
-                       case 5: type = 5; if(v(ref_nested())) { return equal(id_NRS_NSSS_PowerOffset);} return false;
-                       case 6: type = 6; if(v(ref_nested())) { return equal(id_NSSS_NumOccasionDifferentPrecoder);} return false;
-                       case 7: type = 7; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 7; }
-               void clear() {type = 0;}
-               void select_id_UL_EARFCNExtension() { set(reject); type=1;}
-               void select_id_DL_EARFCNExtension() { set(reject); type=2;}
-               void select_id_OffsetOfNbiotChannelNumberToDL_EARFCN() { set(reject); type=3;}
-               void select_id_OffsetOfNbiotChannelNumberToUL_EARFCN() { set(reject); type=4;}
-               void select_id_NRS_NSSS_PowerOffset() { set(ignore); type=5;}
-               void select_id_NSSS_NumOccasionDifferentPrecoder() { set(ignore); type=6;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(reject)) { type = 1; return true; }
-                       else if(equal(reject)) { type = 2; return true; }
-                       else if(equal(reject)) { type = 3; return true; }
-                       else if(equal(reject)) { type = 4; return true; }
-                       else if(equal(ignore)) { type = 5; return true; }
-                       else if(equal(ignore)) { type = 6; return true; }
-                       else { type = 7; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false;
-                       case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false;
-                       case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false;
-                       case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 7: type = 7; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               EARFCNExtension& select_id_UL_EARFCNExtension() { return set<EARFCNExtension>(1); }
-               EARFCNExtension const* get_id_UL_EARFCNExtension() const { return get<EARFCNExtension>(1); }
-               EARFCNExtension& select_id_DL_EARFCNExtension() { return set<EARFCNExtension>(2); }
-               EARFCNExtension const* get_id_DL_EARFCNExtension() const { return get<EARFCNExtension>(2); }
-               OffsetOfNbiotChannelNumberToEARFCN& select_id_OffsetOfNbiotChannelNumberToDL_EARFCN() { return set<OffsetOfNbiotChannelNumberToEARFCN>(3); }
-               OffsetOfNbiotChannelNumberToEARFCN const* get_id_OffsetOfNbiotChannelNumberToDL_EARFCN() const { return get<OffsetOfNbiotChannelNumberToEARFCN>(3); }
-               OffsetOfNbiotChannelNumberToEARFCN& select_id_OffsetOfNbiotChannelNumberToUL_EARFCN() { return set<OffsetOfNbiotChannelNumberToEARFCN>(4); }
-               OffsetOfNbiotChannelNumberToEARFCN const* get_id_OffsetOfNbiotChannelNumberToUL_EARFCN() const { return get<OffsetOfNbiotChannelNumberToEARFCN>(4); }
-               NRS_NSSS_PowerOffset& select_id_NRS_NSSS_PowerOffset() { return set<NRS_NSSS_PowerOffset>(5); }
-               NRS_NSSS_PowerOffset const* get_id_NRS_NSSS_PowerOffset() const { return get<NRS_NSSS_PowerOffset>(5); }
-               NSSS_NumOccasionDifferentPrecoder& select_id_NSSS_NumOccasionDifferentPrecoder() { return set<NSSS_NumOccasionDifferentPrecoder>(6); }
-               NSSS_NumOccasionDifferentPrecoder const* get_id_NSSS_NumOccasionDifferentPrecoder() const { return get<NSSS_NumOccasionDifferentPrecoder>(6); }
-               bool is_unknown() const { return type == 7; }
-               void clear()
-               {
-                       switch(type)
-                       {
-                       case 1: var.destroy<EARFCNExtension>(); break;
-                       case 2: var.destroy<EARFCNExtension>(); break;
-                       case 3: var.destroy<OffsetOfNbiotChannelNumberToEARFCN>(); break;
-                       case 4: var.destroy<OffsetOfNbiotChannelNumberToEARFCN>(); break;
-                       case 5: var.destroy<NRS_NSSS_PowerOffset>(); break;
-                       case 6: var.destroy<NSSS_NumOccasionDifferentPrecoder>(); break;
-                       }
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-                       v.template operator()<EARFCNExtension>(1);
-                       v.template operator()<EARFCNExtension>(2);
-                       v.template operator()<OffsetOfNbiotChannelNumberToEARFCN>(3);
-                       v.template operator()<OffsetOfNbiotChannelNumberToEARFCN>(4);
-                       v.template operator()<NRS_NSSS_PowerOffset>(5);
-                       v.template operator()<NSSS_NumOccasionDifferentPrecoder>(6);
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: v(select_id_UL_EARFCNExtension()); return true;
-                       case 2: v(select_id_DL_EARFCNExtension()); return true;
-                       case 3: v(select_id_OffsetOfNbiotChannelNumberToDL_EARFCN()); return true;
-                       case 4: v(select_id_OffsetOfNbiotChannelNumberToUL_EARFCN()); return true;
-                       case 5: v(select_id_NRS_NSSS_PowerOffset()); return true;
-                       case 6: v(select_id_NSSS_NumOccasionDifferentPrecoder()); return true;
-                       case 7: if(type != 7) {clear(); asn::base::set();} type = 7; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       switch(type)
-                       {
-                       case 1: v(var.as<EARFCNExtension>()); return true;
-                       case 2: v(var.as<EARFCNExtension>()); return true;
-                       case 3: v(var.as<OffsetOfNbiotChannelNumberToEARFCN>()); return true;
-                       case 4: v(var.as<OffsetOfNbiotChannelNumberToEARFCN>()); return true;
-                       case 5: v(var.as<NRS_NSSS_PowerOffset>()); return true;
-                       case 6: v(var.as<NSSS_NumOccasionDifferentPrecoder>()); return true;
-                       }
-                       return false;
-
-               }
-               private:
-               template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
-               template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
-               union union_type
-               {
-                       char dummy1[sizeof(EARFCNExtension)];
-                       char dummy2[sizeof(NRS_NSSS_PowerOffset)];
-                       char dummy3[sizeof(NSSS_NumOccasionDifferentPrecoder)];
-                       char dummy4[sizeof(OffsetOfNbiotChannelNumberToEARFCN)];
-
-               };
-               asn::variant<sizeof(union_type)> var;
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 7; }
-               void clear() {type = 0;}
-               void select_id_UL_EARFCNExtension() { set(optional); type=1;}
-               void select_id_DL_EARFCNExtension() { set(optional); type=2;}
-               void select_id_OffsetOfNbiotChannelNumberToDL_EARFCN() { set(optional); type=3;}
-               void select_id_OffsetOfNbiotChannelNumberToUL_EARFCN() { set(optional); type=4;}
-               void select_id_NRS_NSSS_PowerOffset() { set(optional); type=5;}
-               void select_id_NSSS_NumOccasionDifferentPrecoder() { set(optional); type=6;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(optional)) { type = 1; return true; }
-                       else if(equal(optional)) { type = 2; return true; }
-                       else if(equal(optional)) { type = 3; return true; }
-                       else if(equal(optional)) { type = 4; return true; }
-                       else if(equal(optional)) { type = 5; return true; }
-                       else if(equal(optional)) { type = 6; return true; }
-                       else { type = 7; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 7: type = 7; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-FDD-Info ::= SEQUENCE {
-       uL-EARFCN                                               EARFCN,
-       dL-EARFCN                                               EARFCN,
-       uL-Transmission-Bandwidth               Transmission-Bandwidth,
-       dL-Transmission-Bandwidth               Transmission-Bandwidth,
-       iE-Extensions                           ProtocolExtensionContainer { {FDD-Info-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct FDD_Info : asn::sequence<5, 0, true, 1>
-{
-       static constexpr const char* name() {return "FDD-Info";}
-       using parent_t = asn::sequence<5, 0, true, 1>;
-       struct uL_EARFCN_t : EARFCN
-       {
-               static constexpr const char* name() {return "uL_EARFCN_t";}
-               using parent_t = EARFCN;
-
-       };
-       uL_EARFCN_t& ref_uL_EARFCN() {return uL_EARFCN;}
-       uL_EARFCN_t const& ref_uL_EARFCN() const {return uL_EARFCN;}
-       struct dL_EARFCN_t : EARFCN
-       {
-               static constexpr const char* name() {return "dL_EARFCN_t";}
-               using parent_t = EARFCN;
-
-       };
-       dL_EARFCN_t& ref_dL_EARFCN() {return dL_EARFCN;}
-       dL_EARFCN_t const& ref_dL_EARFCN() const {return dL_EARFCN;}
-       struct uL_Transmission_Bandwidth_t : Transmission_Bandwidth
-       {
-               static constexpr const char* name() {return "uL_Transmission_Bandwidth_t";}
-               using parent_t = Transmission_Bandwidth;
-
-       };
-       uL_Transmission_Bandwidth_t& ref_uL_Transmission_Bandwidth() {return uL_Transmission_Bandwidth;}
-       uL_Transmission_Bandwidth_t const& ref_uL_Transmission_Bandwidth() const {return uL_Transmission_Bandwidth;}
-       struct dL_Transmission_Bandwidth_t : Transmission_Bandwidth
-       {
-               static constexpr const char* name() {return "dL_Transmission_Bandwidth_t";}
-               using parent_t = Transmission_Bandwidth;
-
-       };
-       dL_Transmission_Bandwidth_t& ref_dL_Transmission_Bandwidth() {return dL_Transmission_Bandwidth;}
-       dL_Transmission_Bandwidth_t const& ref_dL_Transmission_Bandwidth() const {return dL_Transmission_Bandwidth;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<FDD_Info_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<FDD_Info_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(uL_EARFCN);
-               v(dL_EARFCN);
-               v(uL_Transmission_Bandwidth);
-               v(dL_Transmission_Bandwidth);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(uL_EARFCN);
-               v(dL_EARFCN);
-               v(uL_Transmission_Bandwidth);
-               v(dL_Transmission_Bandwidth);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               uL_EARFCN.clear();
-               dL_EARFCN.clear();
-               uL_Transmission_Bandwidth.clear();
-               dL_Transmission_Bandwidth.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       uL_EARFCN_t     uL_EARFCN;
-       dL_EARFCN_t     dL_EARFCN;
-       uL_Transmission_Bandwidth_t     uL_Transmission_Bandwidth;
-       dL_Transmission_Bandwidth_t     dL_Transmission_Bandwidth;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-SubframeAssignment ::= ENUMERATED {
-       sa0,
-       sa1,
-       sa2,
-       sa3,
-       sa4,
-       sa5,
-       sa6,
-       ...
-}
-*/
-
-struct SubframeAssignment : asn::enumerated<7, 0, true>
-{
-       static constexpr const char* name() {return "SubframeAssignment";}
-       using parent_t = asn::enumerated<7, 0, true>;
-       typedef enum {
-               sa0
-               ,sa1
-               ,sa2
-               ,sa3
-               ,sa4
-               ,sa5
-               ,sa6
-       } index_t;
-
-};
-
-/*
-SpecialSubframePatterns ::= ENUMERATED {
-       ssp0,
-       ssp1,
-       ssp2,
-       ssp3,
-       ssp4,
-       ssp5,
-       ssp6,
-       ssp7,
-       ssp8,
-       ...
-}
-*/
-
-struct SpecialSubframePatterns : asn::enumerated<9, 0, true>
-{
-       static constexpr const char* name() {return "SpecialSubframePatterns";}
-       using parent_t = asn::enumerated<9, 0, true>;
-       typedef enum {
-               ssp0
-               ,ssp1
-               ,ssp2
-               ,ssp3
-               ,ssp4
-               ,ssp5
-               ,ssp6
-               ,ssp7
-               ,ssp8
-       } index_t;
-
-};
-
-/*
-SpecialSubframe-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct SpecialSubframe_Info_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-SpecialSubframe-Info ::= SEQUENCE {
-       specialSubframePatterns         SpecialSubframePatterns,
-       cyclicPrefixDL                          CyclicPrefixDL,
-       cyclicPrefixUL                          CyclicPrefixUL,
-       iE-Extensions                           ProtocolExtensionContainer { {SpecialSubframe-Info-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct SpecialSubframe_Info : asn::sequence<4, 0, true, 1>
-{
-       static constexpr const char* name() {return "SpecialSubframe-Info";}
-       using parent_t = asn::sequence<4, 0, true, 1>;
-       struct specialSubframePatterns_t : SpecialSubframePatterns
-       {
-               static constexpr const char* name() {return "specialSubframePatterns_t";}
-               using parent_t = SpecialSubframePatterns;
-
-       };
-       specialSubframePatterns_t& ref_specialSubframePatterns() {return specialSubframePatterns;}
-       specialSubframePatterns_t const& ref_specialSubframePatterns() const {return specialSubframePatterns;}
-       struct cyclicPrefixDL_t : CyclicPrefixDL
-       {
-               static constexpr const char* name() {return "cyclicPrefixDL_t";}
-               using parent_t = CyclicPrefixDL;
-
-       };
-       cyclicPrefixDL_t& ref_cyclicPrefixDL() {return cyclicPrefixDL;}
-       cyclicPrefixDL_t const& ref_cyclicPrefixDL() const {return cyclicPrefixDL;}
-       struct cyclicPrefixUL_t : CyclicPrefixUL
-       {
-               static constexpr const char* name() {return "cyclicPrefixUL_t";}
-               using parent_t = CyclicPrefixUL;
-
-       };
-       cyclicPrefixUL_t& ref_cyclicPrefixUL() {return cyclicPrefixUL;}
-       cyclicPrefixUL_t const& ref_cyclicPrefixUL() const {return cyclicPrefixUL;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<SpecialSubframe_Info_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<SpecialSubframe_Info_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(specialSubframePatterns);
-               v(cyclicPrefixDL);
-               v(cyclicPrefixUL);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(specialSubframePatterns);
-               v(cyclicPrefixDL);
-               v(cyclicPrefixUL);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               specialSubframePatterns.clear();
-               cyclicPrefixDL.clear();
-               cyclicPrefixUL.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       specialSubframePatterns_t       specialSubframePatterns;
-       cyclicPrefixDL_t        cyclicPrefixDL;
-       cyclicPrefixUL_t        cyclicPrefixUL;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-TDD-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       { ID id-AdditionalSpecialSubframe-Info  CRITICALITY ignore      EXTENSION AdditionalSpecialSubframe-Info        PRESENCE optional}|
-       { ID id-eARFCNExtension                                 CRITICALITY reject      EXTENSION EARFCNExtension                                               PRESENCE optional}|
-       { ID id-AdditionalSpecialSubframeExtension-Info CRITICALITY ignore      EXTENSION AdditionalSpecialSubframeExtension-Info       PRESENCE optional},
-       ...
-}
-*/
-
-struct TDD_Info_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 4; }
-               void clear() {type = 0;}
-               void select_id_AdditionalSpecialSubframe_Info() { set(id_AdditionalSpecialSubframe_Info); type=1;}
-               void select_id_eARFCNExtension() { set(id_eARFCNExtension); type=2;}
-               void select_id_AdditionalSpecialSubframeExtension_Info() { set(id_AdditionalSpecialSubframeExtension_Info); type=3;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(id_AdditionalSpecialSubframe_Info)) { type = 1; return true; }
-                       else if(equal(id_eARFCNExtension)) { type = 2; return true; }
-                       else if(equal(id_AdditionalSpecialSubframeExtension_Info)) { type = 3; return true; }
-                       else { type = 4; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(id_AdditionalSpecialSubframe_Info);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(id_eARFCNExtension);} return false;
-                       case 3: type = 3; if(v(ref_nested())) { return equal(id_AdditionalSpecialSubframeExtension_Info);} return false;
-                       case 4: type = 4; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 4; }
-               void clear() {type = 0;}
-               void select_id_AdditionalSpecialSubframe_Info() { set(ignore); type=1;}
-               void select_id_eARFCNExtension() { set(reject); type=2;}
-               void select_id_AdditionalSpecialSubframeExtension_Info() { set(ignore); type=3;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(ignore)) { type = 1; return true; }
-                       else if(equal(reject)) { type = 2; return true; }
-                       else if(equal(ignore)) { type = 3; return true; }
-                       else { type = 4; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false;
-                       case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 4: type = 4; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               AdditionalSpecialSubframe_Info& select_id_AdditionalSpecialSubframe_Info() { return set<AdditionalSpecialSubframe_Info>(1); }
-               AdditionalSpecialSubframe_Info const* get_id_AdditionalSpecialSubframe_Info() const { return get<AdditionalSpecialSubframe_Info>(1); }
-               EARFCNExtension& select_id_eARFCNExtension() { return set<EARFCNExtension>(2); }
-               EARFCNExtension const* get_id_eARFCNExtension() const { return get<EARFCNExtension>(2); }
-               AdditionalSpecialSubframeExtension_Info& select_id_AdditionalSpecialSubframeExtension_Info() { return set<AdditionalSpecialSubframeExtension_Info>(3); }
-               AdditionalSpecialSubframeExtension_Info const* get_id_AdditionalSpecialSubframeExtension_Info() const { return get<AdditionalSpecialSubframeExtension_Info>(3); }
-               bool is_unknown() const { return type == 4; }
-               void clear()
-               {
-                       switch(type)
-                       {
-                       case 1: var.destroy<AdditionalSpecialSubframe_Info>(); break;
-                       case 2: var.destroy<EARFCNExtension>(); break;
-                       case 3: var.destroy<AdditionalSpecialSubframeExtension_Info>(); break;
-                       }
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-                       v.template operator()<AdditionalSpecialSubframe_Info>(1);
-                       v.template operator()<EARFCNExtension>(2);
-                       v.template operator()<AdditionalSpecialSubframeExtension_Info>(3);
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: v(select_id_AdditionalSpecialSubframe_Info()); return true;
-                       case 2: v(select_id_eARFCNExtension()); return true;
-                       case 3: v(select_id_AdditionalSpecialSubframeExtension_Info()); return true;
-                       case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       switch(type)
-                       {
-                       case 1: v(var.as<AdditionalSpecialSubframe_Info>()); return true;
-                       case 2: v(var.as<EARFCNExtension>()); return true;
-                       case 3: v(var.as<AdditionalSpecialSubframeExtension_Info>()); return true;
-                       }
-                       return false;
-
-               }
-               private:
-               template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
-               template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
-               union union_type
-               {
-                       char dummy1[sizeof(AdditionalSpecialSubframeExtension_Info)];
-                       char dummy2[sizeof(AdditionalSpecialSubframe_Info)];
-                       char dummy3[sizeof(EARFCNExtension)];
-
-               };
-               asn::variant<sizeof(union_type)> var;
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 4; }
-               void clear() {type = 0;}
-               void select_id_AdditionalSpecialSubframe_Info() { set(optional); type=1;}
-               void select_id_eARFCNExtension() { set(optional); type=2;}
-               void select_id_AdditionalSpecialSubframeExtension_Info() { set(optional); type=3;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(optional)) { type = 1; return true; }
-                       else if(equal(optional)) { type = 2; return true; }
-                       else if(equal(optional)) { type = 3; return true; }
-                       else { type = 4; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 4: type = 4; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-TDD-Info ::= SEQUENCE {
-       eARFCN                                                  EARFCN,
-       transmission-Bandwidth                  Transmission-Bandwidth,
-       subframeAssignment                              SubframeAssignment,
-       specialSubframe-Info                    SpecialSubframe-Info,
-       iE-Extensions                                   ProtocolExtensionContainer { {TDD-Info-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct TDD_Info : asn::sequence<5, 0, true, 1>
-{
-       static constexpr const char* name() {return "TDD-Info";}
-       using parent_t = asn::sequence<5, 0, true, 1>;
-       struct eARFCN_t : EARFCN
-       {
-               static constexpr const char* name() {return "eARFCN_t";}
-               using parent_t = EARFCN;
-
-       };
-       eARFCN_t& ref_eARFCN() {return eARFCN;}
-       eARFCN_t const& ref_eARFCN() const {return eARFCN;}
-       struct transmission_Bandwidth_t : Transmission_Bandwidth
-       {
-               static constexpr const char* name() {return "transmission_Bandwidth_t";}
-               using parent_t = Transmission_Bandwidth;
-
-       };
-       transmission_Bandwidth_t& ref_transmission_Bandwidth() {return transmission_Bandwidth;}
-       transmission_Bandwidth_t const& ref_transmission_Bandwidth() const {return transmission_Bandwidth;}
-       struct subframeAssignment_t : SubframeAssignment
-       {
-               static constexpr const char* name() {return "subframeAssignment_t";}
-               using parent_t = SubframeAssignment;
-
-       };
-       subframeAssignment_t& ref_subframeAssignment() {return subframeAssignment;}
-       subframeAssignment_t const& ref_subframeAssignment() const {return subframeAssignment;}
-       struct specialSubframe_Info_t : SpecialSubframe_Info
-       {
-               static constexpr const char* name() {return "specialSubframe_Info_t";}
-               using parent_t = SpecialSubframe_Info;
-
-       };
-       specialSubframe_Info_t& ref_specialSubframe_Info() {return specialSubframe_Info;}
-       specialSubframe_Info_t const& ref_specialSubframe_Info() const {return specialSubframe_Info;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<TDD_Info_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<TDD_Info_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(eARFCN);
-               v(transmission_Bandwidth);
-               v(subframeAssignment);
-               v(specialSubframe_Info);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(eARFCN);
-               v(transmission_Bandwidth);
-               v(subframeAssignment);
-               v(specialSubframe_Info);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               eARFCN.clear();
-               transmission_Bandwidth.clear();
-               subframeAssignment.clear();
-               specialSubframe_Info.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       eARFCN_t        eARFCN;
-       transmission_Bandwidth_t        transmission_Bandwidth;
-       subframeAssignment_t    subframeAssignment;
-       specialSubframe_Info_t  specialSubframe_Info;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-EUTRA-Mode-Info ::= CHOICE {
-       fDD             FDD-Info,
-       tDD             TDD-Info,
-       ...
-}
-*/
-
-struct EUTRA_Mode_Info : asn::choice<2, 0, true>
-{
-       static constexpr const char* name() {return "EUTRA-Mode-Info";}
-       using parent_t = asn::choice<2, 0, true>;
-       index_type get_index() const {return index;}
-       bool is_unknown() const {return index == 3;}
-       void set_unknown() { set_index(3);  }
-       ~EUTRA_Mode_Info() {clear();}
-       struct fDD_t : FDD_Info
-       {
-               static constexpr const char* name() {return "fDD_t";}
-               using parent_t = FDD_Info;
-
-       };
-       struct tDD_t : TDD_Info
-       {
-               static constexpr const char* name() {return "tDD_t";}
-               using parent_t = TDD_Info;
-
-       };
-       void clear()
-       {
-               switch(get_index())
-               {
-               case 1: var.destroy<fDD_t>(); break;
-               case 2: var.destroy<tDD_t>(); break;
-               }
-               index = 0;
-               base::clear();
-       }
-       template<typename V> bool decode(size_t idx, V& v)
-       {
-               clear();
-               switch(idx)
-               {
-               case 1: set_index(1); return v(var.build<fDD_t>());
-               case 2: set_index(2); return v(var.build<tDD_t>());
-               }
-               return false;
-
-       }
-       template<typename V> bool encode(V& v) const
-       {
-               switch(get_index())
-               {
-               case 1: return v(var.as<fDD_t>());
-               case 2: return v(var.as<tDD_t>());
-               }
-               return false;
-       }
-       template<typename V> static inline void enumerate(V& v)
-       {
-               v.template operator()<fDD_t>(1);
-               v.template operator()<tDD_t>(2);
-
-       }
-       fDD_t& select_fDD() { if(get_index() != 1) { clear(); set_index(1); return var.build<fDD_t>();} return var.as<fDD_t>();}
-       fDD_t const* get_fDD() const { if(get_index() == 1) { return &var.as<fDD_t>();} return nullptr; }
-       tDD_t& select_tDD() { if(get_index() != 2) { clear(); set_index(2); return var.build<tDD_t>();} return var.as<tDD_t>();}
-       tDD_t const* get_tDD() const { if(get_index() == 2) { return &var.as<tDD_t>();} return nullptr; }
-       private:
-       void set_index(index_type i) {index = i; base::set();}
-       union union_type
-       {
-               char dummy1[sizeof(fDD_t)];
-               char dummy2[sizeof(tDD_t)];
-
-       };
-       asn::variant<sizeof(union_type)>        var;
-       index_type      index {0};
-};
-/*
-EUTRANTraceID          ::= OCTET STRING (SIZE (8))
-*/
-
-struct EUTRANTraceID : asn::ostring<>
-{
-       using constraint_t = asn::constraints<false,asn::one<8>>;
-       static constexpr const char* name() {return "EUTRANTraceID";}
-       using parent_t = asn::ostring<>;
-
-};
-
-/*
-EncryptionAlgorithms ::= BIT STRING (SIZE (16, ...))
-*/
-
-struct EncryptionAlgorithms : asn::bstring<>
-{
-       using constraint_t = asn::constraints<true,asn::one<16>>;
-       static constexpr const char* name() {return "EncryptionAlgorithms";}
-       using parent_t = asn::bstring<>;
-
-};
-
-/*
-RNTP-Threshold ::= ENUMERATED {
-       minusInfinity,
-       minusEleven,
-       minusTen,
-       minusNine,
-       minusEight,
-       minusSeven,
-       minusSix,
-       minusFive,
-       minusFour,
-       minusThree,
-       minusTwo,
-       minusOne,
-       zero,
-       one,
-       two,
-       three,
-       ...
-}
-*/
-
-struct RNTP_Threshold : asn::enumerated<16, 0, true>
-{
-       static constexpr const char* name() {return "RNTP-Threshold";}
-       using parent_t = asn::enumerated<16, 0, true>;
-       typedef enum {
-               minusInfinity
-               ,minusEleven
-               ,minusTen
-               ,minusNine
-               ,minusEight
-               ,minusSeven
-               ,minusSix
-               ,minusFive
-               ,minusFour
-               ,minusThree
-               ,minusTwo
-               ,minusOne
-               ,zero
-               ,one
-               ,two
-               ,three
-       } index_t;
-
-};
-
-/*
-EnhancedRNTPStartTime-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct EnhancedRNTPStartTime_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-EnhancedRNTPStartTime ::= SEQUENCE {
-               startSFN                                INTEGER (0..1023, ...),
-               startSubframeNumber             INTEGER (0..9, ...),
-               iE-Extensions                   ProtocolExtensionContainer { {EnhancedRNTPStartTime-ExtIEs} } OPTIONAL,
-               ...
-       }
-*/
-
-struct EnhancedRNTPStartTime : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "EnhancedRNTPStartTime";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct startSFN_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<true,asn::span<0, 1023>>;
-               static constexpr const char* name() {return "startSFN_t";}
-               using parent_t = asn::integer<>;
-
-       };
-
-       startSFN_t& ref_startSFN() {return startSFN;}
-       startSFN_t const& ref_startSFN() const {return startSFN;}
-       struct startSubframeNumber_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<true,asn::span<0, 9>>;
-               static constexpr const char* name() {return "startSubframeNumber_t";}
-               using parent_t = asn::integer<>;
-
-       };
-
-       startSubframeNumber_t& ref_startSubframeNumber() {return startSubframeNumber;}
-       startSubframeNumber_t const& ref_startSubframeNumber() const {return startSubframeNumber;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<EnhancedRNTPStartTime_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<EnhancedRNTPStartTime_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(startSFN);
-               v(startSubframeNumber);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(startSFN);
-               v(startSubframeNumber);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               startSFN.clear();
-               startSubframeNumber.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       startSFN_t      startSFN;
-       startSubframeNumber_t   startSubframeNumber;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-EnhancedRNTP-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct EnhancedRNTP_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-EnhancedRNTP ::= SEQUENCE {
-       enhancedRNTPBitmap                      BIT STRING (SIZE(12..8800, ...)),
-       rNTP-High-Power-Threshold       RNTP-Threshold,
-       enhancedRNTPStartTime           EnhancedRNTPStartTime OPTIONAL,
-       iE-Extensions                           ProtocolExtensionContainer { {EnhancedRNTP-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct EnhancedRNTP : asn::sequence<4, 0, true, 2>
-{
-       static constexpr const char* name() {return "EnhancedRNTP";}
-       using parent_t = asn::sequence<4, 0, true, 2>;
-       struct enhancedRNTPBitmap_t : asn::bstring<>
-       {
-               using constraint_t = asn::constraints<true,asn::span<12, 8800>>;
-               static constexpr const char* name() {return "enhancedRNTPBitmap_t";}
-               using parent_t = asn::bstring<>;
-
-       };
-
-       enhancedRNTPBitmap_t& ref_enhancedRNTPBitmap() {return enhancedRNTPBitmap;}
-       enhancedRNTPBitmap_t const& ref_enhancedRNTPBitmap() const {return enhancedRNTPBitmap;}
-       struct rNTP_High_Power_Threshold_t : RNTP_Threshold
-       {
-               static constexpr const char* name() {return "rNTP_High_Power_Threshold_t";}
-               using parent_t = RNTP_Threshold;
-
-       };
-       rNTP_High_Power_Threshold_t& ref_rNTP_High_Power_Threshold() {return rNTP_High_Power_Threshold;}
-       rNTP_High_Power_Threshold_t const& ref_rNTP_High_Power_Threshold() const {return rNTP_High_Power_Threshold;}
-       struct enhancedRNTPStartTime_t : EnhancedRNTPStartTime
-       {
-               static constexpr const char* name() {return "enhancedRNTPStartTime_t";}
-               using parent_t = EnhancedRNTPStartTime;
-               static constexpr bool optional = true;
-
-       };
-       enhancedRNTPStartTime_t& set_enhancedRNTPStartTime() { enhancedRNTPStartTime.setpresent(true); return enhancedRNTPStartTime;}
-       enhancedRNTPStartTime_t const* get_enhancedRNTPStartTime() const {return enhancedRNTPStartTime.is_valid() ? &enhancedRNTPStartTime : nullptr;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<EnhancedRNTP_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<EnhancedRNTP_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(enhancedRNTPBitmap);
-               v(rNTP_High_Power_Threshold);
-               v(enhancedRNTPStartTime);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(enhancedRNTPBitmap);
-               v(rNTP_High_Power_Threshold);
-               v(enhancedRNTPStartTime);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               enhancedRNTPBitmap.clear();
-               rNTP_High_Power_Threshold.clear();
-               enhancedRNTPStartTime.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       enhancedRNTPBitmap_t    enhancedRNTPBitmap;
-       rNTP_High_Power_Threshold_t     rNTP_High_Power_Threshold;
-       enhancedRNTPStartTime_t enhancedRNTPStartTime;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-EventType ::= ENUMERATED{
-       change-of-serving-cell,
-       ...
-}
-*/
-
-struct EventType : asn::enumerated<1, 0, true>
-{
-       static constexpr const char* name() {return "EventType";}
-       using parent_t = asn::enumerated<1, 0, true>;
-       typedef enum {
-               change_of_serving_cell
-       } index_t;
-
-};
-
-/*
-ExpectedActivityPeriod ::= INTEGER (1..30|40|50|60|80|100|120|150|180|181,...)
-*/
-
-struct ExpectedActivityPeriod : asn::integer<>
-{
-       using constraint_t = asn::constraints<true,asn::span<1, 30>,asn::one<40>,asn::one<50>,asn::one<60>,asn::one<80>,asn::one<100>,asn::one<120>,asn::one<150>,asn::one<180>,asn::one<181>>;
-       static constexpr const char* name() {return "ExpectedActivityPeriod";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-ExpectedHOInterval ::= ENUMERATED {
-       sec15, sec30, sec60, sec90, sec120, sec180, long-time,
-       ...
-}
-*/
-
-struct ExpectedHOInterval : asn::enumerated<7, 0, true>
-{
-       static constexpr const char* name() {return "ExpectedHOInterval";}
-       using parent_t = asn::enumerated<7, 0, true>;
-       typedef enum {
-               sec15
-               ,sec30
-               ,sec60
-               ,sec90
-               ,sec120
-               ,sec180
-               ,long_time
-       } index_t;
-
-};
-
-/*
-ExpectedIdlePeriod ::= INTEGER (1..30|40|50|60|80|100|120|150|180|181,...)
-*/
-
-struct ExpectedIdlePeriod : asn::integer<>
-{
-       using constraint_t = asn::constraints<true,asn::span<1, 30>,asn::one<40>,asn::one<50>,asn::one<60>,asn::one<80>,asn::one<100>,asn::one<120>,asn::one<150>,asn::one<180>,asn::one<181>>;
-       static constexpr const char* name() {return "ExpectedIdlePeriod";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-SourceOfUEActivityBehaviourInformation ::= ENUMERATED {
-       subscription-information,
-       statistics,
-       ...
-}
-*/
-
-struct SourceOfUEActivityBehaviourInformation : asn::enumerated<2, 0, true>
-{
-       static constexpr const char* name() {return "SourceOfUEActivityBehaviourInformation";}
-       using parent_t = asn::enumerated<2, 0, true>;
-       typedef enum {
-               subscription_information
-               ,statistics
-       } index_t;
-
-};
-
-/*
-ExpectedUEActivityBehaviour-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct ExpectedUEActivityBehaviour_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-ExpectedUEActivityBehaviour ::= SEQUENCE {
-       expectedActivityPeriod                                  ExpectedActivityPeriod                                  OPTIONAL,
-       expectedIdlePeriod                                              ExpectedIdlePeriod                                              OPTIONAL,
-       sourceofUEActivityBehaviourInformation  SourceOfUEActivityBehaviourInformation  OPTIONAL,
-       iE-Extensions           ProtocolExtensionContainer { {ExpectedUEActivityBehaviour-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct ExpectedUEActivityBehaviour : asn::sequence<4, 0, true, 4>
-{
-       static constexpr const char* name() {return "ExpectedUEActivityBehaviour";}
-       using parent_t = asn::sequence<4, 0, true, 4>;
-       struct expectedActivityPeriod_t : ExpectedActivityPeriod
-       {
-               static constexpr const char* name() {return "expectedActivityPeriod_t";}
-               using parent_t = ExpectedActivityPeriod;
-               static constexpr bool optional = true;
-
-       };
-       expectedActivityPeriod_t& set_expectedActivityPeriod() { expectedActivityPeriod.setpresent(true); return expectedActivityPeriod;}
-       expectedActivityPeriod_t const* get_expectedActivityPeriod() const {return expectedActivityPeriod.is_valid() ? &expectedActivityPeriod : nullptr;}
-       struct expectedIdlePeriod_t : ExpectedIdlePeriod
-       {
-               static constexpr const char* name() {return "expectedIdlePeriod_t";}
-               using parent_t = ExpectedIdlePeriod;
-               static constexpr bool optional = true;
-
-       };
-       expectedIdlePeriod_t& set_expectedIdlePeriod() { expectedIdlePeriod.setpresent(true); return expectedIdlePeriod;}
-       expectedIdlePeriod_t const* get_expectedIdlePeriod() const {return expectedIdlePeriod.is_valid() ? &expectedIdlePeriod : nullptr;}
-       struct sourceofUEActivityBehaviourInformation_t : SourceOfUEActivityBehaviourInformation
-       {
-               static constexpr const char* name() {return "sourceofUEActivityBehaviourInformation_t";}
-               using parent_t = SourceOfUEActivityBehaviourInformation;
-               static constexpr bool optional = true;
-
-       };
-       sourceofUEActivityBehaviourInformation_t& set_sourceofUEActivityBehaviourInformation() { sourceofUEActivityBehaviourInformation.setpresent(true); return sourceofUEActivityBehaviourInformation;}
-       sourceofUEActivityBehaviourInformation_t const* get_sourceofUEActivityBehaviourInformation() const {return sourceofUEActivityBehaviourInformation.is_valid() ? &sourceofUEActivityBehaviourInformation : nullptr;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<ExpectedUEActivityBehaviour_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<ExpectedUEActivityBehaviour_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(expectedActivityPeriod);
-               v(expectedIdlePeriod);
-               v(sourceofUEActivityBehaviourInformation);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(expectedActivityPeriod);
-               v(expectedIdlePeriod);
-               v(sourceofUEActivityBehaviourInformation);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               expectedActivityPeriod.clear();
-               expectedIdlePeriod.clear();
-               sourceofUEActivityBehaviourInformation.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       expectedActivityPeriod_t        expectedActivityPeriod;
-       expectedIdlePeriod_t    expectedIdlePeriod;
-       sourceofUEActivityBehaviourInformation_t        sourceofUEActivityBehaviourInformation;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-ExpectedUEBehaviour-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct ExpectedUEBehaviour_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-ExpectedUEBehaviour ::= SEQUENCE {
-       expectedActivity                ExpectedUEActivityBehaviour OPTIONAL,
-       expectedHOInterval              ExpectedHOInterval                      OPTIONAL,
-       iE-Extensions                   ProtocolExtensionContainer { {ExpectedUEBehaviour-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct ExpectedUEBehaviour : asn::sequence<3, 0, true, 3>
-{
-       static constexpr const char* name() {return "ExpectedUEBehaviour";}
-       using parent_t = asn::sequence<3, 0, true, 3>;
-       struct expectedActivity_t : ExpectedUEActivityBehaviour
-       {
-               static constexpr const char* name() {return "expectedActivity_t";}
-               using parent_t = ExpectedUEActivityBehaviour;
-               static constexpr bool optional = true;
-
-       };
-       expectedActivity_t& set_expectedActivity() { expectedActivity.setpresent(true); return expectedActivity;}
-       expectedActivity_t const* get_expectedActivity() const {return expectedActivity.is_valid() ? &expectedActivity : nullptr;}
-       struct expectedHOInterval_t : ExpectedHOInterval
-       {
-               static constexpr const char* name() {return "expectedHOInterval_t";}
-               using parent_t = ExpectedHOInterval;
-               static constexpr bool optional = true;
-
-       };
-       expectedHOInterval_t& set_expectedHOInterval() { expectedHOInterval.setpresent(true); return expectedHOInterval;}
-       expectedHOInterval_t const* get_expectedHOInterval() const {return expectedHOInterval.is_valid() ? &expectedHOInterval : nullptr;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<ExpectedUEBehaviour_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<ExpectedUEBehaviour_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(expectedActivity);
-               v(expectedHOInterval);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(expectedActivity);
-               v(expectedHOInterval);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               expectedActivity.clear();
-               expectedHOInterval.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       expectedActivity_t      expectedActivity;
-       expectedHOInterval_t    expectedHOInterval;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-UL-InterferenceOverloadIndication-Item ::= ENUMERATED {
-       high-interference,
-       medium-interference,
-       low-interference,
-       ...
-}
-*/
-
-struct UL_InterferenceOverloadIndication_Item : asn::enumerated<3, 0, true>
-{
-       static constexpr const char* name() {return "UL-InterferenceOverloadIndication-Item";}
-       using parent_t = asn::enumerated<3, 0, true>;
-       typedef enum {
-               high_interference
-               ,medium_interference
-               ,low_interference
-       } index_t;
-
-};
-
-/*
-UL-InterferenceOverloadIndication ::= SEQUENCE (SIZE(1..maxnoofPRBs)) OF UL-InterferenceOverloadIndication-Item
-*/
-
-struct UL_InterferenceOverloadIndication_elm : UL_InterferenceOverloadIndication_Item
-{
-       static constexpr const char* name() {return "UL_InterferenceOverloadIndication_elm";}
-       using parent_t = UL_InterferenceOverloadIndication_Item;
-
-};
-struct UL_InterferenceOverloadIndication : asn::sequenceof<UL_InterferenceOverloadIndication_elm>
-{
-       static constexpr const char* name() {return "UL-InterferenceOverloadIndication";}
-       using parent_t = asn::sequenceof<UL_InterferenceOverloadIndication_elm>;
-       using constraint_t = asn::constraints<false,asn::span<1,  maxnoofPRBs >>;
-
-};
-/*
-ExtendedULInterferenceOverloadInfo-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct ExtendedULInterferenceOverloadInfo_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-ExtendedULInterferenceOverloadInfo ::= SEQUENCE {
-       associatedSubframes                                                     BIT STRING (SIZE (5)),
-       extended-ul-InterferenceOverloadIndication      UL-InterferenceOverloadIndication,
-       iE-Extensions                                                           ProtocolExtensionContainer { {ExtendedULInterferenceOverloadInfo-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct ExtendedULInterferenceOverloadInfo : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "ExtendedULInterferenceOverloadInfo";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct associatedSubframes_t : asn::bstring<>
-       {
-               using constraint_t = asn::constraints<false,asn::one<5>>;
-               static constexpr const char* name() {return "associatedSubframes_t";}
-               using parent_t = asn::bstring<>;
-
-       };
-
-       associatedSubframes_t& ref_associatedSubframes() {return associatedSubframes;}
-       associatedSubframes_t const& ref_associatedSubframes() const {return associatedSubframes;}
-       struct extended_ul_InterferenceOverloadIndication_t : UL_InterferenceOverloadIndication
-       {
-               static constexpr const char* name() {return "extended_ul_InterferenceOverloadIndication_t";}
-               using parent_t = UL_InterferenceOverloadIndication;
-
-       };
-       extended_ul_InterferenceOverloadIndication_t& ref_extended_ul_InterferenceOverloadIndication() {return extended_ul_InterferenceOverloadIndication;}
-       extended_ul_InterferenceOverloadIndication_t const& ref_extended_ul_InterferenceOverloadIndication() const {return extended_ul_InterferenceOverloadIndication;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<ExtendedULInterferenceOverloadInfo_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<ExtendedULInterferenceOverloadInfo_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(associatedSubframes);
-               v(extended_ul_InterferenceOverloadIndication);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(associatedSubframes);
-               v(extended_ul_InterferenceOverloadIndication);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               associatedSubframes.clear();
-               extended_ul_InterferenceOverloadIndication.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       associatedSubframes_t   associatedSubframes;
-       extended_ul_InterferenceOverloadIndication_t    extended_ul_InterferenceOverloadIndication;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-FiveGS-TAC ::= OCTET STRING (SIZE (3))
-*/
-
-struct FiveGS_TAC : asn::ostring<>
-{
-       using constraint_t = asn::constraints<false,asn::one<3>>;
-       static constexpr const char* name() {return "FiveGS-TAC";}
-       using parent_t = asn::ostring<>;
-
-};
-
-/*
-ForbiddenInterRATs ::= ENUMERATED {
-       all,
-       geran,
-       utran,
-       cdma2000,
-       ...,
-       geranandutran,
-       cdma2000andutran
-
-}
-*/
-
-struct ForbiddenInterRATs : asn::enumerated<6, 2, true>
-{
-       static constexpr const char* name() {return "ForbiddenInterRATs";}
-       using parent_t = asn::enumerated<6, 2, true>;
-       typedef enum {
-               all
-               ,geran
-               ,utran
-               ,cdma2000
-               ,geranandutran
-               ,cdma2000andutran
-       } index_t;
-
-};
-
-/*
-LAC                                    ::= OCTET STRING (SIZE (2)) --(EXCEPT ('0000'H|'FFFE'H))
-*/
-
-struct LAC : asn::ostring<>
-{
-       using constraint_t = asn::constraints<false,asn::one<2>>;
-       static constexpr const char* name() {return "LAC";}
-       using parent_t = asn::ostring<>;
-
-};
-
-/*
-ForbiddenLACs ::= SEQUENCE (SIZE(1..maxnoofForbLACs)) OF LAC
-*/
-
-struct ForbiddenLACs_elm : LAC
-{
-       static constexpr const char* name() {return "ForbiddenLACs_elm";}
-       using parent_t = LAC;
-
-};
-struct ForbiddenLACs : asn::sequenceof<ForbiddenLACs_elm>
-{
-       static constexpr const char* name() {return "ForbiddenLACs";}
-       using parent_t = asn::sequenceof<ForbiddenLACs_elm>;
-       using constraint_t = asn::constraints<false,asn::span<1,  maxnoofForbLACs >>;
-
-};
-/*
-ForbiddenLAs-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct ForbiddenLAs_Item_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-ForbiddenLAs-Item ::= SEQUENCE {
-       pLMN-Identity           PLMN-Identity,
-       forbiddenLACs           ForbiddenLACs,
-       iE-Extensions           ProtocolExtensionContainer { {ForbiddenLAs-Item-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct ForbiddenLAs_Item : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "ForbiddenLAs-Item";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct pLMN_Identity_t : PLMN_Identity
-       {
-               static constexpr const char* name() {return "pLMN_Identity_t";}
-               using parent_t = PLMN_Identity;
-
-       };
-       pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;}
-       pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;}
-       struct forbiddenLACs_t : ForbiddenLACs
-       {
-               static constexpr const char* name() {return "forbiddenLACs_t";}
-               using parent_t = ForbiddenLACs;
-
-       };
-       forbiddenLACs_t& ref_forbiddenLACs() {return forbiddenLACs;}
-       forbiddenLACs_t const& ref_forbiddenLACs() const {return forbiddenLACs;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<ForbiddenLAs_Item_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<ForbiddenLAs_Item_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(pLMN_Identity);
-               v(forbiddenLACs);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(pLMN_Identity);
-               v(forbiddenLACs);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               pLMN_Identity.clear();
-               forbiddenLACs.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       pLMN_Identity_t pLMN_Identity;
-       forbiddenLACs_t forbiddenLACs;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-ForbiddenLAs ::= SEQUENCE (SIZE(1..maxnoofEPLMNsPlusOne)) OF ForbiddenLAs-Item
-*/
-
-struct ForbiddenLAs_elm : ForbiddenLAs_Item
-{
-       static constexpr const char* name() {return "ForbiddenLAs_elm";}
-       using parent_t = ForbiddenLAs_Item;
-
-};
-struct ForbiddenLAs : asn::sequenceof<ForbiddenLAs_elm>
-{
-       static constexpr const char* name() {return "ForbiddenLAs";}
-       using parent_t = asn::sequenceof<ForbiddenLAs_elm>;
-       using constraint_t = asn::constraints<false,asn::span<1,  maxnoofEPLMNsPlusOne >>;
-
-};
-/*
-ForbiddenTACs ::= SEQUENCE (SIZE(1..maxnoofForbTACs)) OF TAC
-*/
-
-struct ForbiddenTACs_elm : TAC
-{
-       static constexpr const char* name() {return "ForbiddenTACs_elm";}
-       using parent_t = TAC;
-
-};
-struct ForbiddenTACs : asn::sequenceof<ForbiddenTACs_elm>
-{
-       static constexpr const char* name() {return "ForbiddenTACs";}
-       using parent_t = asn::sequenceof<ForbiddenTACs_elm>;
-       using constraint_t = asn::constraints<false,asn::span<1,  maxnoofForbTACs >>;
-
-};
-/*
-ForbiddenTAs-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct ForbiddenTAs_Item_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-ForbiddenTAs-Item ::= SEQUENCE {
-       pLMN-Identity           PLMN-Identity,
-       forbiddenTACs           ForbiddenTACs,
-       iE-Extensions           ProtocolExtensionContainer { {ForbiddenTAs-Item-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct ForbiddenTAs_Item : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "ForbiddenTAs-Item";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct pLMN_Identity_t : PLMN_Identity
-       {
-               static constexpr const char* name() {return "pLMN_Identity_t";}
-               using parent_t = PLMN_Identity;
-
-       };
-       pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;}
-       pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;}
-       struct forbiddenTACs_t : ForbiddenTACs
-       {
-               static constexpr const char* name() {return "forbiddenTACs_t";}
-               using parent_t = ForbiddenTACs;
-
-       };
-       forbiddenTACs_t& ref_forbiddenTACs() {return forbiddenTACs;}
-       forbiddenTACs_t const& ref_forbiddenTACs() const {return forbiddenTACs;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<ForbiddenTAs_Item_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<ForbiddenTAs_Item_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(pLMN_Identity);
-               v(forbiddenTACs);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(pLMN_Identity);
-               v(forbiddenTACs);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               pLMN_Identity.clear();
-               forbiddenTACs.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       pLMN_Identity_t pLMN_Identity;
-       forbiddenTACs_t forbiddenTACs;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-ForbiddenTAs ::= SEQUENCE (SIZE(1.. maxnoofEPLMNsPlusOne)) OF ForbiddenTAs-Item
-*/
-
-struct ForbiddenTAs_elm : ForbiddenTAs_Item
-{
-       static constexpr const char* name() {return "ForbiddenTAs_elm";}
-       using parent_t = ForbiddenTAs_Item;
-
-};
-struct ForbiddenTAs : asn::sequenceof<ForbiddenTAs_elm>
-{
-       static constexpr const char* name() {return "ForbiddenTAs";}
-       using parent_t = asn::sequenceof<ForbiddenTAs_elm>;
-       using constraint_t = asn::constraints<false,asn::span<1,  maxnoofEPLMNsPlusOne >>;
-
-};
-/*
-Fourframes ::= BIT STRING (SIZE (24))
-*/
-
-struct Fourframes : asn::bstring<>
-{
-       using constraint_t = asn::constraints<false,asn::one<24>>;
-       static constexpr const char* name() {return "Fourframes";}
-       using parent_t = asn::bstring<>;
-
-};
-
-/*
-FreqBandIndicatorPriority ::= ENUMERATED {
-       not-broadcasted,
-       broadcasted,
-       ...
-}
-*/
-
-struct FreqBandIndicatorPriority : asn::enumerated<2, 0, true>
-{
-       static constexpr const char* name() {return "FreqBandIndicatorPriority";}
-       using parent_t = asn::enumerated<2, 0, true>;
-       typedef enum {
-               not_broadcasted
-               ,broadcasted
-       } index_t;
-
-};
-
-/*
-SupportedSULFreqBandItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct SupportedSULFreqBandItem_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-SupportedSULFreqBandItem ::= SEQUENCE {
-       freqBandIndicatorNr                     INTEGER (1..1024,...),
-       iE-Extensions                   ProtocolExtensionContainer { {SupportedSULFreqBandItem-ExtIEs} }                OPTIONAL,
-       ...
-}
-*/
-
-struct SupportedSULFreqBandItem : asn::sequence<2, 0, true, 1>
-{
-       static constexpr const char* name() {return "SupportedSULFreqBandItem";}
-       using parent_t = asn::sequence<2, 0, true, 1>;
-       struct freqBandIndicatorNr_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<true,asn::span<1, 1024>>;
-               static constexpr const char* name() {return "freqBandIndicatorNr_t";}
-               using parent_t = asn::integer<>;
-
-       };
-
-       freqBandIndicatorNr_t& ref_freqBandIndicatorNr() {return freqBandIndicatorNr;}
-       freqBandIndicatorNr_t const& ref_freqBandIndicatorNr() const {return freqBandIndicatorNr;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<SupportedSULFreqBandItem_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<SupportedSULFreqBandItem_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(freqBandIndicatorNr);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(freqBandIndicatorNr);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               freqBandIndicatorNr.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       freqBandIndicatorNr_t   freqBandIndicatorNr;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-FreqBandNrItem-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct FreqBandNrItem_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-FreqBandNrItem ::= SEQUENCE {
-       freqBandIndicatorNr                     INTEGER (1..1024,...),
-       supportedSULBandList    SEQUENCE (SIZE(0..maxnoofNrCellBands)) OF SupportedSULFreqBandItem,
-       iE-Extensions                           ProtocolExtensionContainer { {FreqBandNrItem-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct FreqBandNrItem : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "FreqBandNrItem";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct freqBandIndicatorNr_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<true,asn::span<1, 1024>>;
-               static constexpr const char* name() {return "freqBandIndicatorNr_t";}
-               using parent_t = asn::integer<>;
-
-       };
-
-       freqBandIndicatorNr_t& ref_freqBandIndicatorNr() {return freqBandIndicatorNr;}
-       freqBandIndicatorNr_t const& ref_freqBandIndicatorNr() const {return freqBandIndicatorNr;}
-       struct supportedSULBandList_t_elm : SupportedSULFreqBandItem
-       {
-               static constexpr const char* name() {return "supportedSULBandList_t_elm";}
-               using parent_t = SupportedSULFreqBandItem;
-
-       };
-       struct supportedSULBandList_t : asn::sequenceof<supportedSULBandList_t_elm>
-       {
-               static constexpr const char* name() {return "supportedSULBandList_t";}
-               using parent_t = asn::sequenceof<supportedSULBandList_t_elm>;
-               using constraint_t = asn::constraints<false,asn::span<0,  maxnoofNrCellBands >>;
-
-       };
-       supportedSULBandList_t& ref_supportedSULBandList() {return supportedSULBandList;}
-       supportedSULBandList_t const& ref_supportedSULBandList() const {return supportedSULBandList;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<FreqBandNrItem_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<FreqBandNrItem_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(freqBandIndicatorNr);
-               v(supportedSULBandList);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(freqBandIndicatorNr);
-               v(supportedSULBandList);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               freqBandIndicatorNr.clear();
-               supportedSULBandList.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       freqBandIndicatorNr_t   freqBandIndicatorNr;
-       supportedSULBandList_t  supportedSULBandList;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-GNB-ID ::= CHOICE {
-       gNB-ID  BIT STRING (SIZE (22..32)),
-       ...
-}
-*/
-
-struct GNB_ID : asn::choice<1, 0, true>
-{
-       static constexpr const char* name() {return "GNB-ID";}
-       using parent_t = asn::choice<1, 0, true>;
-       index_type get_index() const {return index;}
-       bool is_unknown() const {return index == 2;}
-       void set_unknown() { set_index(2);  }
-       ~GNB_ID() {clear();}
-       struct gNB_ID_t : asn::bstring<>
-       {
-               using constraint_t = asn::constraints<false,asn::span<22, 32>>;
-               static constexpr const char* name() {return "gNB_ID_t";}
-               using parent_t = asn::bstring<>;
-
-       };
-
-       void clear()
-       {
-               switch(get_index())
-               {
-               case 1: var.destroy<gNB_ID_t>(); break;
-               }
-               index = 0;
-               base::clear();
-       }
-       template<typename V> bool decode(size_t idx, V& v)
-       {
-               clear();
-               switch(idx)
-               {
-               case 1: set_index(1); return v(var.build<gNB_ID_t>());
-               }
-               return false;
-
-       }
-       template<typename V> bool encode(V& v) const
-       {
-               switch(get_index())
-               {
-               case 1: return v(var.as<gNB_ID_t>());
-               }
-               return false;
-       }
-       template<typename V> static inline void enumerate(V& v)
-       {
-               v.template operator()<gNB_ID_t>(1);
-
-       }
-       gNB_ID_t& select_gNB_ID() { if(get_index() != 1) { clear(); set_index(1); return var.build<gNB_ID_t>();} return var.as<gNB_ID_t>();}
-       gNB_ID_t const* get_gNB_ID() const { if(get_index() == 1) { return &var.as<gNB_ID_t>();} return nullptr; }
-       private:
-       void set_index(index_type i) {index = i; base::set();}
-       union union_type
-       {
-               char dummy1[sizeof(gNB_ID_t)];
-
-       };
-       asn::variant<sizeof(union_type)>        var;
-       index_type      index {0};
-};
-/*
-GNBOverloadInformation ::= ENUMERATED {overloaded, not-overloaded, ...}
-*/
-
-struct GNBOverloadInformation : asn::enumerated<2, 0, true>
-{
-       static constexpr const char* name() {return "GNBOverloadInformation";}
-       using parent_t = asn::enumerated<2, 0, true>;
-       typedef enum {
-               overloaded
-               ,not_overloaded
-       } index_t;
-
-};
-
-/*
-GTP-TEI                                        ::= OCTET STRING (SIZE (4))
-*/
-
-struct GTP_TEI : asn::ostring<>
-{
-       using constraint_t = asn::constraints<false,asn::one<4>>;
-       static constexpr const char* name() {return "GTP-TEI";}
-       using parent_t = asn::ostring<>;
-
-};
-
-/*
-TransportLayerAddress                  ::= BIT STRING (SIZE(1..160, ...))
-*/
-
-struct TransportLayerAddress : asn::bstring<>
-{
-       using constraint_t = asn::constraints<true,asn::span<1, 160>>;
-       static constexpr const char* name() {return "TransportLayerAddress";}
-       using parent_t = asn::bstring<>;
-
-};
-
-/*
-GTPtunnelEndpoint-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct GTPtunnelEndpoint_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-GTPtunnelEndpoint ::= SEQUENCE {
-       transportLayerAddress                   TransportLayerAddress,
-       gTP-TEID                                                GTP-TEI,
-       iE-Extensions                                   ProtocolExtensionContainer { {GTPtunnelEndpoint-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct GTPtunnelEndpoint : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "GTPtunnelEndpoint";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct transportLayerAddress_t : TransportLayerAddress
-       {
-               static constexpr const char* name() {return "transportLayerAddress_t";}
-               using parent_t = TransportLayerAddress;
-
-       };
-       transportLayerAddress_t& ref_transportLayerAddress() {return transportLayerAddress;}
-       transportLayerAddress_t const& ref_transportLayerAddress() const {return transportLayerAddress;}
-       struct gTP_TEID_t : GTP_TEI
-       {
-               static constexpr const char* name() {return "gTP_TEID_t";}
-               using parent_t = GTP_TEI;
-
-       };
-       gTP_TEID_t& ref_gTP_TEID() {return gTP_TEID;}
-       gTP_TEID_t const& ref_gTP_TEID() const {return gTP_TEID;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<GTPtunnelEndpoint_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<GTPtunnelEndpoint_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(transportLayerAddress);
-               v(gTP_TEID);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(transportLayerAddress);
-               v(gTP_TEID);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               transportLayerAddress.clear();
-               gTP_TEID.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       transportLayerAddress_t transportLayerAddress;
-       gTP_TEID_t      gTP_TEID;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-MME-Group-ID   ::= OCTET STRING (SIZE (2))
-*/
-
-struct MME_Group_ID : asn::ostring<>
-{
-       using constraint_t = asn::constraints<false,asn::one<2>>;
-       static constexpr const char* name() {return "MME-Group-ID";}
-       using parent_t = asn::ostring<>;
-
-};
-
-/*
-GU-Group-ID-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct GU_Group_ID_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-GU-Group-ID                    ::= SEQUENCE {
-       pLMN-Identity           PLMN-Identity,
-       mME-Group-ID            MME-Group-ID,
-       iE-Extensions           ProtocolExtensionContainer { {GU-Group-ID-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct GU_Group_ID : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "GU-Group-ID";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct pLMN_Identity_t : PLMN_Identity
-       {
-               static constexpr const char* name() {return "pLMN_Identity_t";}
-               using parent_t = PLMN_Identity;
-
-       };
-       pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;}
-       pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;}
-       struct mME_Group_ID_t : MME_Group_ID
-       {
-               static constexpr const char* name() {return "mME_Group_ID_t";}
-               using parent_t = MME_Group_ID;
-
-       };
-       mME_Group_ID_t& ref_mME_Group_ID() {return mME_Group_ID;}
-       mME_Group_ID_t const& ref_mME_Group_ID() const {return mME_Group_ID;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<GU_Group_ID_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<GU_Group_ID_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(pLMN_Identity);
-               v(mME_Group_ID);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(pLMN_Identity);
-               v(mME_Group_ID);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               pLMN_Identity.clear();
-               mME_Group_ID.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       pLMN_Identity_t pLMN_Identity;
-       mME_Group_ID_t  mME_Group_ID;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-GUGroupIDList          ::= SEQUENCE (SIZE (1..maxPools)) OF GU-Group-ID
-*/
-
-struct GUGroupIDList_elm : GU_Group_ID
-{
-       static constexpr const char* name() {return "GUGroupIDList_elm";}
-       using parent_t = GU_Group_ID;
-
-};
-struct GUGroupIDList : asn::sequenceof<GUGroupIDList_elm>
-{
-       static constexpr const char* name() {return "GUGroupIDList";}
-       using parent_t = asn::sequenceof<GUGroupIDList_elm>;
-       using constraint_t = asn::constraints<false,asn::span<1,  maxPools >>;
-
-};
-/*
-MME-Code               ::= OCTET STRING (SIZE (1))
-*/
-
-struct MME_Code : asn::ostring<>
-{
-       using constraint_t = asn::constraints<false,asn::one<1>>;
-       static constexpr const char* name() {return "MME-Code";}
-       using parent_t = asn::ostring<>;
-
-};
-
-/*
-GUMMEI-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct GUMMEI_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-GUMMEI                 ::= SEQUENCE {
-
-       gU-Group-ID             GU-Group-ID,
-       mME-Code                        MME-Code,
-       iE-Extensions                                   ProtocolExtensionContainer { {GUMMEI-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct GUMMEI : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "GUMMEI";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct gU_Group_ID_t : GU_Group_ID
-       {
-               static constexpr const char* name() {return "gU_Group_ID_t";}
-               using parent_t = GU_Group_ID;
-
-       };
-       gU_Group_ID_t& ref_gU_Group_ID() {return gU_Group_ID;}
-       gU_Group_ID_t const& ref_gU_Group_ID() const {return gU_Group_ID;}
-       struct mME_Code_t : MME_Code
-       {
-               static constexpr const char* name() {return "mME_Code_t";}
-               using parent_t = MME_Code;
-
-       };
-       mME_Code_t& ref_mME_Code() {return mME_Code;}
-       mME_Code_t const& ref_mME_Code() const {return mME_Code;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<GUMMEI_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<GUMMEI_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(gU_Group_ID);
-               v(mME_Code);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(gU_Group_ID);
-               v(mME_Code);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               gU_Group_ID.clear();
-               mME_Code.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       gU_Group_ID_t   gU_Group_ID;
-       mME_Code_t      mME_Code;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-GlobalENB-ID-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct GlobalENB_ID_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-GlobalENB-ID ::= SEQUENCE {
-       pLMN-Identity                   PLMN-Identity,
-       eNB-ID                                  ENB-ID,
-       iE-Extensions                   ProtocolExtensionContainer { {GlobalENB-ID-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct GlobalENB_ID : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "GlobalENB-ID";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct pLMN_Identity_t : PLMN_Identity
-       {
-               static constexpr const char* name() {return "pLMN_Identity_t";}
-               using parent_t = PLMN_Identity;
-
-       };
-       pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;}
-       pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;}
-       struct eNB_ID_t : ENB_ID
-       {
-               static constexpr const char* name() {return "eNB_ID_t";}
-               using parent_t = ENB_ID;
-
-       };
-       eNB_ID_t& ref_eNB_ID() {return eNB_ID;}
-       eNB_ID_t const& ref_eNB_ID() const {return eNB_ID;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<GlobalENB_ID_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<GlobalENB_ID_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(pLMN_Identity);
-               v(eNB_ID);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(pLMN_Identity);
-               v(eNB_ID);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               pLMN_Identity.clear();
-               eNB_ID.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       pLMN_Identity_t pLMN_Identity;
-       eNB_ID_t        eNB_ID;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-GlobalGNB-ID-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct GlobalGNB_ID_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-GlobalGNB-ID ::= SEQUENCE {
-       pLMN-Identity                   PLMN-Identity,
-       gNB-ID                                  GNB-ID,
-       iE-Extensions                   ProtocolExtensionContainer { {GlobalGNB-ID-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct GlobalGNB_ID : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "GlobalGNB-ID";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct pLMN_Identity_t : PLMN_Identity
-       {
-               static constexpr const char* name() {return "pLMN_Identity_t";}
-               using parent_t = PLMN_Identity;
-
-       };
-       pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;}
-       pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;}
-       struct gNB_ID_t : GNB_ID
-       {
-               static constexpr const char* name() {return "gNB_ID_t";}
-               using parent_t = GNB_ID;
-
-       };
-       gNB_ID_t& ref_gNB_ID() {return gNB_ID;}
-       gNB_ID_t const& ref_gNB_ID() const {return gNB_ID;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<GlobalGNB_ID_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<GlobalGNB_ID_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(pLMN_Identity);
-               v(gNB_ID);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(pLMN_Identity);
-               v(gNB_ID);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               pLMN_Identity.clear();
-               gNB_ID.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       pLMN_Identity_t pLMN_Identity;
-       gNB_ID_t        gNB_ID;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-LoadIndicator ::= ENUMERATED {
-       lowLoad,
-       mediumLoad,
-       highLoad,
-       overLoad,
-       ...
-}
-*/
-
-struct LoadIndicator : asn::enumerated<4, 0, true>
-{
-       static constexpr const char* name() {return "LoadIndicator";}
-       using parent_t = asn::enumerated<4, 0, true>;
-       typedef enum {
-               lowLoad
-               ,mediumLoad
-               ,highLoad
-               ,overLoad
-       } index_t;
-
-};
-
-/*
-HWLoadIndicator-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct HWLoadIndicator_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-HWLoadIndicator ::= SEQUENCE {
-       dLHWLoadIndicator                       LoadIndicator,
-       uLHWLoadIndicator                       LoadIndicator,
-       iE-Extensions                           ProtocolExtensionContainer { {HWLoadIndicator-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct HWLoadIndicator : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "HWLoadIndicator";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct dLHWLoadIndicator_t : LoadIndicator
-       {
-               static constexpr const char* name() {return "dLHWLoadIndicator_t";}
-               using parent_t = LoadIndicator;
-
-       };
-       dLHWLoadIndicator_t& ref_dLHWLoadIndicator() {return dLHWLoadIndicator;}
-       dLHWLoadIndicator_t const& ref_dLHWLoadIndicator() const {return dLHWLoadIndicator;}
-       struct uLHWLoadIndicator_t : LoadIndicator
-       {
-               static constexpr const char* name() {return "uLHWLoadIndicator_t";}
-               using parent_t = LoadIndicator;
-
-       };
-       uLHWLoadIndicator_t& ref_uLHWLoadIndicator() {return uLHWLoadIndicator;}
-       uLHWLoadIndicator_t const& ref_uLHWLoadIndicator() const {return uLHWLoadIndicator;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<HWLoadIndicator_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<HWLoadIndicator_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(dLHWLoadIndicator);
-               v(uLHWLoadIndicator);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(dLHWLoadIndicator);
-               v(uLHWLoadIndicator);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               dLHWLoadIndicator.clear();
-               uLHWLoadIndicator.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       dLHWLoadIndicator_t     dLHWLoadIndicator;
-       uLHWLoadIndicator_t     uLHWLoadIndicator;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-HandoverReportType ::= ENUMERATED {
-       hoTooEarly,
-       hoToWrongCell,
-       ...,
-       interRATpingpong
-}
-*/
-
-struct HandoverReportType : asn::enumerated<3, 1, true>
-{
-       static constexpr const char* name() {return "HandoverReportType";}
-       using parent_t = asn::enumerated<3, 1, true>;
-       typedef enum {
-               hoTooEarly
-               ,hoToWrongCell
-               ,interRATpingpong
-       } index_t;
-
-};
-
-/*
-NRrestrictioninEPSasSecondaryRAT ::= ENUMERATED {
-       nRrestrictedinEPSasSecondaryRAT,
-       ...
-}
-*/
-
-struct NRrestrictioninEPSasSecondaryRAT : asn::enumerated<1, 0, true>
-{
-       static constexpr const char* name() {return "NRrestrictioninEPSasSecondaryRAT";}
-       using parent_t = asn::enumerated<1, 0, true>;
-       typedef enum {
-               nRrestrictedinEPSasSecondaryRAT
-       } index_t;
-
-};
-
-/*
-NRrestrictionin5GS ::= ENUMERATED {
-       nRrestrictedin5GS,
-       ...
-}
-*/
-
-struct NRrestrictionin5GS : asn::enumerated<1, 0, true>
-{
-       static constexpr const char* name() {return "NRrestrictionin5GS";}
-       using parent_t = asn::enumerated<1, 0, true>;
-       typedef enum {
-               nRrestrictedin5GS
-       } index_t;
-
-};
-
-/*
-HandoverRestrictionList-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       { ID id-NRrestrictioninEPSasSecondaryRAT                        CRITICALITY ignore      EXTENSION NRrestrictioninEPSasSecondaryRAT                      PRESENCE optional}|
-       { ID id-CNTypeRestrictions                                              CRITICALITY ignore      EXTENSION CNTypeRestrictions                                                            PRESENCE optional}|
-       { ID id-NRrestrictionin5GS                                              CRITICALITY ignore      EXTENSION NRrestrictionin5GS                                                            PRESENCE optional},
-       ...
-}
-*/
-
-struct HandoverRestrictionList_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 4; }
-               void clear() {type = 0;}
-               void select_id_NRrestrictioninEPSasSecondaryRAT() { set(id_NRrestrictioninEPSasSecondaryRAT); type=1;}
-               void select_id_CNTypeRestrictions() { set(id_CNTypeRestrictions); type=2;}
-               void select_id_NRrestrictionin5GS() { set(id_NRrestrictionin5GS); type=3;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(id_NRrestrictioninEPSasSecondaryRAT)) { type = 1; return true; }
-                       else if(equal(id_CNTypeRestrictions)) { type = 2; return true; }
-                       else if(equal(id_NRrestrictionin5GS)) { type = 3; return true; }
-                       else { type = 4; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(id_NRrestrictioninEPSasSecondaryRAT);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(id_CNTypeRestrictions);} return false;
-                       case 3: type = 3; if(v(ref_nested())) { return equal(id_NRrestrictionin5GS);} return false;
-                       case 4: type = 4; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 4; }
-               void clear() {type = 0;}
-               void select_id_NRrestrictioninEPSasSecondaryRAT() { set(ignore); type=1;}
-               void select_id_CNTypeRestrictions() { set(ignore); type=2;}
-               void select_id_NRrestrictionin5GS() { set(ignore); type=3;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(ignore)) { type = 1; return true; }
-                       else if(equal(ignore)) { type = 2; return true; }
-                       else if(equal(ignore)) { type = 3; return true; }
-                       else { type = 4; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 4: type = 4; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               NRrestrictioninEPSasSecondaryRAT& select_id_NRrestrictioninEPSasSecondaryRAT() { return set<NRrestrictioninEPSasSecondaryRAT>(1); }
-               NRrestrictioninEPSasSecondaryRAT const* get_id_NRrestrictioninEPSasSecondaryRAT() const { return get<NRrestrictioninEPSasSecondaryRAT>(1); }
-               CNTypeRestrictions& select_id_CNTypeRestrictions() { return set<CNTypeRestrictions>(2); }
-               CNTypeRestrictions const* get_id_CNTypeRestrictions() const { return get<CNTypeRestrictions>(2); }
-               NRrestrictionin5GS& select_id_NRrestrictionin5GS() { return set<NRrestrictionin5GS>(3); }
-               NRrestrictionin5GS const* get_id_NRrestrictionin5GS() const { return get<NRrestrictionin5GS>(3); }
-               bool is_unknown() const { return type == 4; }
-               void clear()
-               {
-                       switch(type)
-                       {
-                       case 1: var.destroy<NRrestrictioninEPSasSecondaryRAT>(); break;
-                       case 2: var.destroy<CNTypeRestrictions>(); break;
-                       case 3: var.destroy<NRrestrictionin5GS>(); break;
-                       }
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-                       v.template operator()<NRrestrictioninEPSasSecondaryRAT>(1);
-                       v.template operator()<CNTypeRestrictions>(2);
-                       v.template operator()<NRrestrictionin5GS>(3);
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: v(select_id_NRrestrictioninEPSasSecondaryRAT()); return true;
-                       case 2: v(select_id_CNTypeRestrictions()); return true;
-                       case 3: v(select_id_NRrestrictionin5GS()); return true;
-                       case 4: if(type != 4) {clear(); asn::base::set();} type = 4; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       switch(type)
-                       {
-                       case 1: v(var.as<NRrestrictioninEPSasSecondaryRAT>()); return true;
-                       case 2: v(var.as<CNTypeRestrictions>()); return true;
-                       case 3: v(var.as<NRrestrictionin5GS>()); return true;
-                       }
-                       return false;
-
-               }
-               private:
-               template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
-               template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
-               union union_type
-               {
-                       char dummy1[sizeof(CNTypeRestrictions)];
-                       char dummy2[sizeof(NRrestrictionin5GS)];
-                       char dummy3[sizeof(NRrestrictioninEPSasSecondaryRAT)];
-
-               };
-               asn::variant<sizeof(union_type)> var;
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 4; }
-               void clear() {type = 0;}
-               void select_id_NRrestrictioninEPSasSecondaryRAT() { set(optional); type=1;}
-               void select_id_CNTypeRestrictions() { set(optional); type=2;}
-               void select_id_NRrestrictionin5GS() { set(optional); type=3;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(optional)) { type = 1; return true; }
-                       else if(equal(optional)) { type = 2; return true; }
-                       else if(equal(optional)) { type = 3; return true; }
-                       else { type = 4; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 4: type = 4; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-HandoverRestrictionList ::= SEQUENCE {
-       servingPLMN                                     PLMN-Identity,
-       equivalentPLMNs                         EPLMNs                                  OPTIONAL,
-       forbiddenTAs                            ForbiddenTAs                    OPTIONAL,
-       forbiddenLAs                            ForbiddenLAs                    OPTIONAL,
-       forbiddenInterRATs                      ForbiddenInterRATs              OPTIONAL,
-       iE-Extensions                           ProtocolExtensionContainer { {HandoverRestrictionList-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct HandoverRestrictionList : asn::sequence<6, 0, true, 5>
-{
-       static constexpr const char* name() {return "HandoverRestrictionList";}
-       using parent_t = asn::sequence<6, 0, true, 5>;
-       struct servingPLMN_t : PLMN_Identity
-       {
-               static constexpr const char* name() {return "servingPLMN_t";}
-               using parent_t = PLMN_Identity;
-
-       };
-       servingPLMN_t& ref_servingPLMN() {return servingPLMN;}
-       servingPLMN_t const& ref_servingPLMN() const {return servingPLMN;}
-       struct equivalentPLMNs_t : EPLMNs
-       {
-               static constexpr const char* name() {return "equivalentPLMNs_t";}
-               using parent_t = EPLMNs;
-               static constexpr bool optional = true;
-
-       };
-       equivalentPLMNs_t& set_equivalentPLMNs() { equivalentPLMNs.setpresent(true); return equivalentPLMNs;}
-       equivalentPLMNs_t const* get_equivalentPLMNs() const {return equivalentPLMNs.is_valid() ? &equivalentPLMNs : nullptr;}
-       struct forbiddenTAs_t : ForbiddenTAs
-       {
-               static constexpr const char* name() {return "forbiddenTAs_t";}
-               using parent_t = ForbiddenTAs;
-               static constexpr bool optional = true;
-
-       };
-       forbiddenTAs_t& set_forbiddenTAs() { forbiddenTAs.setpresent(true); return forbiddenTAs;}
-       forbiddenTAs_t const* get_forbiddenTAs() const {return forbiddenTAs.is_valid() ? &forbiddenTAs : nullptr;}
-       struct forbiddenLAs_t : ForbiddenLAs
-       {
-               static constexpr const char* name() {return "forbiddenLAs_t";}
-               using parent_t = ForbiddenLAs;
-               static constexpr bool optional = true;
-
-       };
-       forbiddenLAs_t& set_forbiddenLAs() { forbiddenLAs.setpresent(true); return forbiddenLAs;}
-       forbiddenLAs_t const* get_forbiddenLAs() const {return forbiddenLAs.is_valid() ? &forbiddenLAs : nullptr;}
-       struct forbiddenInterRATs_t : ForbiddenInterRATs
-       {
-               static constexpr const char* name() {return "forbiddenInterRATs_t";}
-               using parent_t = ForbiddenInterRATs;
-               static constexpr bool optional = true;
-
-       };
-       forbiddenInterRATs_t& set_forbiddenInterRATs() { forbiddenInterRATs.setpresent(true); return forbiddenInterRATs;}
-       forbiddenInterRATs_t const* get_forbiddenInterRATs() const {return forbiddenInterRATs.is_valid() ? &forbiddenInterRATs : nullptr;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<HandoverRestrictionList_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<HandoverRestrictionList_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(servingPLMN);
-               v(equivalentPLMNs);
-               v(forbiddenTAs);
-               v(forbiddenLAs);
-               v(forbiddenInterRATs);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(servingPLMN);
-               v(equivalentPLMNs);
-               v(forbiddenTAs);
-               v(forbiddenLAs);
-               v(forbiddenInterRATs);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               servingPLMN.clear();
-               equivalentPLMNs.clear();
-               forbiddenTAs.clear();
-               forbiddenLAs.clear();
-               forbiddenInterRATs.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       servingPLMN_t   servingPLMN;
-       equivalentPLMNs_t       equivalentPLMNs;
-       forbiddenTAs_t  forbiddenTAs;
-       forbiddenLAs_t  forbiddenLAs;
-       forbiddenInterRATs_t    forbiddenInterRATs;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-IntegrityProtectionAlgorithms ::= BIT STRING (SIZE (16, ...))
-*/
-
-struct IntegrityProtectionAlgorithms : asn::bstring<>
-{
-       using constraint_t = asn::constraints<true,asn::one<16>>;
-       static constexpr const char* name() {return "IntegrityProtectionAlgorithms";}
-       using parent_t = asn::bstring<>;
-
-};
-
-/*
-InterfacesToTrace ::= BIT STRING (SIZE (8))
-*/
-
-struct InterfacesToTrace : asn::bstring<>
-{
-       using constraint_t = asn::constraints<false,asn::one<8>>;
-       static constexpr const char* name() {return "InterfacesToTrace";}
-       using parent_t = asn::bstring<>;
-
-};
-
-/*
-InvokeIndication ::= ENUMERATED{
-       abs-information,
-       ...,
-       naics-information-start,
-       naics-information-stop
-}
-*/
-
-struct InvokeIndication : asn::enumerated<3, 2, true>
-{
-       static constexpr const char* name() {return "InvokeIndication";}
-       using parent_t = asn::enumerated<3, 2, true>;
-       typedef enum {
-               abs_information
-               ,naics_information_start
-               ,naics_information_stop
-       } index_t;
-
-};
-
-/*
-LCID ::= INTEGER(1..32, ...)
-*/
-
-struct LCID : asn::integer<>
-{
-       using constraint_t = asn::constraints<true,asn::span<1, 32>>;
-       static constexpr const char* name() {return "LCID";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-LHN-ID ::= OCTET STRING(SIZE (32..256))
-*/
-
-struct LHN_ID : asn::ostring<>
-{
-       using constraint_t = asn::constraints<false,asn::span<32, 256>>;
-       static constexpr const char* name() {return "LHN-ID";}
-       using parent_t = asn::ostring<>;
-
-};
-
-/*
-Time-UE-StayedInCell ::= INTEGER (0..4095)
-*/
-
-struct Time_UE_StayedInCell : asn::integer<>
-{
-       using constraint_t = asn::constraints<false,asn::span<0, 4095>>;
-       static constexpr const char* name() {return "Time-UE-StayedInCell";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-Time-UE-StayedInCell-EnhancedGranularity ::= INTEGER (0..40950)
-*/
-
-struct Time_UE_StayedInCell_EnhancedGranularity : asn::integer<>
-{
-       using constraint_t = asn::constraints<false,asn::span<0, 40950>>;
-       static constexpr const char* name() {return "Time-UE-StayedInCell-EnhancedGranularity";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-LastVisitedEUTRANCellInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
--- Extension for Rel-11 to support enhanced granularity for time UE stayed in cell --
-       { ID id-Time-UE-StayedInCell-EnhancedGranularity        CRITICALITY ignore      EXTENSION Time-UE-StayedInCell-EnhancedGranularity      PRESENCE optional}|
-       { ID id-HO-cause                                                                        CRITICALITY ignore      EXTENSION Cause                                                                                                 PRESENCE optional},
-       ...
-}
-*/
-
-struct LastVisitedEUTRANCellInformation_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 3; }
-               void clear() {type = 0;}
-               void select_id_Time_UE_StayedInCell_EnhancedGranularity() { set(id_Time_UE_StayedInCell_EnhancedGranularity); type=1;}
-               void select_id_HO_cause() { set(id_HO_cause); type=2;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(id_Time_UE_StayedInCell_EnhancedGranularity)) { type = 1; return true; }
-                       else if(equal(id_HO_cause)) { type = 2; return true; }
-                       else { type = 3; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(id_Time_UE_StayedInCell_EnhancedGranularity);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(id_HO_cause);} return false;
-                       case 3: type = 3; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 3; }
-               void clear() {type = 0;}
-               void select_id_Time_UE_StayedInCell_EnhancedGranularity() { set(ignore); type=1;}
-               void select_id_HO_cause() { set(ignore); type=2;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(ignore)) { type = 1; return true; }
-                       else if(equal(ignore)) { type = 2; return true; }
-                       else { type = 3; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 3: type = 3; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               Time_UE_StayedInCell_EnhancedGranularity& select_id_Time_UE_StayedInCell_EnhancedGranularity() { return set<Time_UE_StayedInCell_EnhancedGranularity>(1); }
-               Time_UE_StayedInCell_EnhancedGranularity const* get_id_Time_UE_StayedInCell_EnhancedGranularity() const { return get<Time_UE_StayedInCell_EnhancedGranularity>(1); }
-               Cause& select_id_HO_cause() { return set<Cause>(2); }
-               Cause const* get_id_HO_cause() const { return get<Cause>(2); }
-               bool is_unknown() const { return type == 3; }
-               void clear()
-               {
-                       switch(type)
-                       {
-                       case 1: var.destroy<Time_UE_StayedInCell_EnhancedGranularity>(); break;
-                       case 2: var.destroy<Cause>(); break;
-                       }
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-                       v.template operator()<Time_UE_StayedInCell_EnhancedGranularity>(1);
-                       v.template operator()<Cause>(2);
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: v(select_id_Time_UE_StayedInCell_EnhancedGranularity()); return true;
-                       case 2: v(select_id_HO_cause()); return true;
-                       case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       switch(type)
-                       {
-                       case 1: v(var.as<Time_UE_StayedInCell_EnhancedGranularity>()); return true;
-                       case 2: v(var.as<Cause>()); return true;
-                       }
-                       return false;
-
-               }
-               private:
-               template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
-               template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
-               union union_type
-               {
-                       char dummy1[sizeof(Cause)];
-                       char dummy2[sizeof(Time_UE_StayedInCell_EnhancedGranularity)];
-
-               };
-               asn::variant<sizeof(union_type)> var;
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 3; }
-               void clear() {type = 0;}
-               void select_id_Time_UE_StayedInCell_EnhancedGranularity() { set(optional); type=1;}
-               void select_id_HO_cause() { set(optional); type=2;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(optional)) { type = 1; return true; }
-                       else if(equal(optional)) { type = 2; return true; }
-                       else { type = 3; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 3: type = 3; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-LastVisitedEUTRANCellInformation ::= SEQUENCE {
-       global-Cell-ID                                  ECGI,
-       cellType                                                CellType,
-       time-UE-StayedInCell                    Time-UE-StayedInCell,
-       iE-Extensions                                   ProtocolExtensionContainer { {LastVisitedEUTRANCellInformation-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct LastVisitedEUTRANCellInformation : asn::sequence<4, 0, true, 1>
-{
-       static constexpr const char* name() {return "LastVisitedEUTRANCellInformation";}
-       using parent_t = asn::sequence<4, 0, true, 1>;
-       struct global_Cell_ID_t : ECGI
-       {
-               static constexpr const char* name() {return "global_Cell_ID_t";}
-               using parent_t = ECGI;
-
-       };
-       global_Cell_ID_t& ref_global_Cell_ID() {return global_Cell_ID;}
-       global_Cell_ID_t const& ref_global_Cell_ID() const {return global_Cell_ID;}
-       struct cellType_t : CellType
-       {
-               static constexpr const char* name() {return "cellType_t";}
-               using parent_t = CellType;
-
-       };
-       cellType_t& ref_cellType() {return cellType;}
-       cellType_t const& ref_cellType() const {return cellType;}
-       struct time_UE_StayedInCell_t : Time_UE_StayedInCell
-       {
-               static constexpr const char* name() {return "time_UE_StayedInCell_t";}
-               using parent_t = Time_UE_StayedInCell;
-
-       };
-       time_UE_StayedInCell_t& ref_time_UE_StayedInCell() {return time_UE_StayedInCell;}
-       time_UE_StayedInCell_t const& ref_time_UE_StayedInCell() const {return time_UE_StayedInCell;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<LastVisitedEUTRANCellInformation_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<LastVisitedEUTRANCellInformation_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(global_Cell_ID);
-               v(cellType);
-               v(time_UE_StayedInCell);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(global_Cell_ID);
-               v(cellType);
-               v(time_UE_StayedInCell);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               global_Cell_ID.clear();
-               cellType.clear();
-               time_UE_StayedInCell.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       global_Cell_ID_t        global_Cell_ID;
-       cellType_t      cellType;
-       time_UE_StayedInCell_t  time_UE_StayedInCell;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-LastVisitedUTRANCellInformation        ::= OCTET STRING
-*/
-
-struct LastVisitedUTRANCellInformation : asn::ostring<>
-{
-       static constexpr const char* name() {return "LastVisitedUTRANCellInformation";}
-       using parent_t = asn::ostring<>;
-
-};
-
-/*
-LastVisitedGERANCellInformation ::= CHOICE {
-       undefined                                               NULL,
-       ...
-}
-*/
-
-struct LastVisitedGERANCellInformation : asn::choice<1, 0, true>
-{
-       static constexpr const char* name() {return "LastVisitedGERANCellInformation";}
-       using parent_t = asn::choice<1, 0, true>;
-       index_type get_index() const {return index;}
-       bool is_unknown() const {return index == 2;}
-       void set_unknown() { set_index(2);  }
-       ~LastVisitedGERANCellInformation() {clear();}
-       struct undefined_t : asn::nulltype
-       {
-               static constexpr const char* name() {return "undefined_t";}
-               using parent_t = asn::nulltype;
-
-       };
-       void clear()
-       {
-               switch(get_index())
-               {
-               case 1: var.destroy<undefined_t>(); break;
-               }
-               index = 0;
-               base::clear();
-       }
-       template<typename V> bool decode(size_t idx, V& v)
-       {
-               clear();
-               switch(idx)
-               {
-               case 1: set_index(1); return v(var.build<undefined_t>());
-               }
-               return false;
-
-       }
-       template<typename V> bool encode(V& v) const
-       {
-               switch(get_index())
-               {
-               case 1: return v(var.as<undefined_t>());
-               }
-               return false;
-       }
-       template<typename V> static inline void enumerate(V& v)
-       {
-               v.template operator()<undefined_t>(1);
-
-       }
-       undefined_t& select_undefined() { if(get_index() != 1) { clear(); set_index(1); return var.build<undefined_t>();} return var.as<undefined_t>();}
-       undefined_t const* get_undefined() const { if(get_index() == 1) { return &var.as<undefined_t>();} return nullptr; }
-       private:
-       void set_index(index_type i) {index = i; base::set();}
-       union union_type
-       {
-               char dummy1[sizeof(undefined_t)];
-
-       };
-       asn::variant<sizeof(union_type)>        var;
-       index_type      index {0};
-};
-/*
-LastVisitedNGRANCellInformation        ::= OCTET STRING
-*/
-
-struct LastVisitedNGRANCellInformation : asn::ostring<>
-{
-       static constexpr const char* name() {return "LastVisitedNGRANCellInformation";}
-       using parent_t = asn::ostring<>;
-
-};
-
-/*
-LastVisitedCell-Item ::= CHOICE {
-       e-UTRAN-Cell                                    LastVisitedEUTRANCellInformation,
-       uTRAN-Cell                                              LastVisitedUTRANCellInformation,
-       gERAN-Cell                                              LastVisitedGERANCellInformation,
-       ...,
-       nG-RAN-Cell                                             LastVisitedNGRANCellInformation
-}
-*/
-
-struct LastVisitedCell_Item : asn::choice<4, 1, true>
-{
-       static constexpr const char* name() {return "LastVisitedCell-Item";}
-       using parent_t = asn::choice<4, 1, true>;
-       index_type get_index() const {return index;}
-       bool is_unknown() const {return index == 5;}
-       void set_unknown() { set_index(5);  }
-       ~LastVisitedCell_Item() {clear();}
-       struct e_UTRAN_Cell_t : LastVisitedEUTRANCellInformation
-       {
-               static constexpr const char* name() {return "e_UTRAN_Cell_t";}
-               using parent_t = LastVisitedEUTRANCellInformation;
-
-       };
-       struct uTRAN_Cell_t : LastVisitedUTRANCellInformation
-       {
-               static constexpr const char* name() {return "uTRAN_Cell_t";}
-               using parent_t = LastVisitedUTRANCellInformation;
-
-       };
-       struct gERAN_Cell_t : LastVisitedGERANCellInformation
-       {
-               static constexpr const char* name() {return "gERAN_Cell_t";}
-               using parent_t = LastVisitedGERANCellInformation;
-
-       };
-       struct nG_RAN_Cell_t : LastVisitedNGRANCellInformation
-       {
-               static constexpr const char* name() {return "nG_RAN_Cell_t";}
-               using parent_t = LastVisitedNGRANCellInformation;
-
-       };
-       void clear()
-       {
-               switch(get_index())
-               {
-               case 1: var.destroy<e_UTRAN_Cell_t>(); break;
-               case 2: var.destroy<uTRAN_Cell_t>(); break;
-               case 3: var.destroy<gERAN_Cell_t>(); break;
-               case 4: var.destroy<nG_RAN_Cell_t>(); break;
-               }
-               index = 0;
-               base::clear();
-       }
-       template<typename V> bool decode(size_t idx, V& v)
-       {
-               clear();
-               switch(idx)
-               {
-               case 1: set_index(1); return v(var.build<e_UTRAN_Cell_t>());
-               case 2: set_index(2); return v(var.build<uTRAN_Cell_t>());
-               case 3: set_index(3); return v(var.build<gERAN_Cell_t>());
-               case 4: set_index(4); return v(var.build<nG_RAN_Cell_t>());
-               }
-               return false;
-
-       }
-       template<typename V> bool encode(V& v) const
-       {
-               switch(get_index())
-               {
-               case 1: return v(var.as<e_UTRAN_Cell_t>());
-               case 2: return v(var.as<uTRAN_Cell_t>());
-               case 3: return v(var.as<gERAN_Cell_t>());
-               case 4: return v(var.as<nG_RAN_Cell_t>());
-               }
-               return false;
-       }
-       template<typename V> static inline void enumerate(V& v)
-       {
-               v.template operator()<e_UTRAN_Cell_t>(1);
-               v.template operator()<uTRAN_Cell_t>(2);
-               v.template operator()<gERAN_Cell_t>(3);
-               v.template operator()<nG_RAN_Cell_t>(4);
-
-       }
-       e_UTRAN_Cell_t& select_e_UTRAN_Cell() { if(get_index() != 1) { clear(); set_index(1); return var.build<e_UTRAN_Cell_t>();} return var.as<e_UTRAN_Cell_t>();}
-       e_UTRAN_Cell_t const* get_e_UTRAN_Cell() const { if(get_index() == 1) { return &var.as<e_UTRAN_Cell_t>();} return nullptr; }
-       uTRAN_Cell_t& select_uTRAN_Cell() { if(get_index() != 2) { clear(); set_index(2); return var.build<uTRAN_Cell_t>();} return var.as<uTRAN_Cell_t>();}
-       uTRAN_Cell_t const* get_uTRAN_Cell() const { if(get_index() == 2) { return &var.as<uTRAN_Cell_t>();} return nullptr; }
-       gERAN_Cell_t& select_gERAN_Cell() { if(get_index() != 3) { clear(); set_index(3); return var.build<gERAN_Cell_t>();} return var.as<gERAN_Cell_t>();}
-       gERAN_Cell_t const* get_gERAN_Cell() const { if(get_index() == 3) { return &var.as<gERAN_Cell_t>();} return nullptr; }
-       nG_RAN_Cell_t& select_nG_RAN_Cell() { if(get_index() != 4) { clear(); set_index(4); return var.build<nG_RAN_Cell_t>();} return var.as<nG_RAN_Cell_t>();}
-       nG_RAN_Cell_t const* get_nG_RAN_Cell() const { if(get_index() == 4) { return &var.as<nG_RAN_Cell_t>();} return nullptr; }
-       private:
-       void set_index(index_type i) {index = i; base::set();}
-       union union_type
-       {
-               char dummy1[sizeof(e_UTRAN_Cell_t)];
-               char dummy2[sizeof(uTRAN_Cell_t)];
-               char dummy3[sizeof(gERAN_Cell_t)];
-               char dummy4[sizeof(nG_RAN_Cell_t)];
-
-       };
-       asn::variant<sizeof(union_type)>        var;
-       index_type      index {0};
-};
-/*
-Links-to-log ::= ENUMERATED {uplink, downlink, both-uplink-and-downlink, ...}
-*/
-
-struct Links_to_log : asn::enumerated<3, 0, true>
-{
-       static constexpr const char* name() {return "Links-to-log";}
-       using parent_t = asn::enumerated<3, 0, true>;
-       typedef enum {
-               uplink
-               ,downlink
-               ,both_uplink_and_downlink
-       } index_t;
-
-};
-
-/*
-ReportArea ::= ENUMERATED{
-       ecgi,
-       ...
-}
-*/
-
-struct ReportArea : asn::enumerated<1, 0, true>
-{
-       static constexpr const char* name() {return "ReportArea";}
-       using parent_t = asn::enumerated<1, 0, true>;
-       typedef enum {
-               ecgi
-       } index_t;
-
-};
-
-/*
-LocationReportingInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::={
-       ...
-}
-*/
-
-struct LocationReportingInformation_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-LocationReportingInformation ::= SEQUENCE {
-       eventType               EventType,
-       reportArea              ReportArea,
-       iE-Extensions           ProtocolExtensionContainer { {LocationReportingInformation-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct LocationReportingInformation : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "LocationReportingInformation";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct eventType_t : EventType
-       {
-               static constexpr const char* name() {return "eventType_t";}
-               using parent_t = EventType;
-
-       };
-       eventType_t& ref_eventType() {return eventType;}
-       eventType_t const& ref_eventType() const {return eventType;}
-       struct reportArea_t : ReportArea
-       {
-               static constexpr const char* name() {return "reportArea_t";}
-               using parent_t = ReportArea;
-
-       };
-       reportArea_t& ref_reportArea() {return reportArea;}
-       reportArea_t const& ref_reportArea() const {return reportArea;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<LocationReportingInformation_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<LocationReportingInformation_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(eventType);
-               v(reportArea);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(eventType);
-               v(reportArea);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               eventType.clear();
-               reportArea.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       eventType_t     eventType;
-       reportArea_t    reportArea;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-ReportIntervalMDT ::= ENUMERATED {ms120, ms240, ms480, ms640, ms1024, ms2048, ms5120, ms10240, min1, min6, min12, min30, min60}
-*/
-
-struct ReportIntervalMDT : asn::enumerated<13, 0, false>
-{
-       static constexpr const char* name() {return "ReportIntervalMDT";}
-       using parent_t = asn::enumerated<13, 0, false>;
-       typedef enum {
-               ms120
-               ,ms240
-               ,ms480
-               ,ms640
-               ,ms1024
-               ,ms2048
-               ,ms5120
-               ,ms10240
-               ,min1
-               ,min6
-               ,min12
-               ,min30
-               ,min60
-       } index_t;
-
-};
-
-/*
-ReportAmountMDT ::= ENUMERATED{r1, r2, r4, r8, r16, r32, r64, rinfinity}
-*/
-
-struct ReportAmountMDT : asn::enumerated<8, 0, false>
-{
-       static constexpr const char* name() {return "ReportAmountMDT";}
-       using parent_t = asn::enumerated<8, 0, false>;
-       typedef enum {
-               r1
-               ,r2
-               ,r4
-               ,r8
-               ,r16
-               ,r32
-               ,r64
-               ,rinfinity
-       } index_t;
-
-};
-
-/*
-M1PeriodicReporting-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct M1PeriodicReporting_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-M1PeriodicReporting ::= SEQUENCE {
-       reportInterval                          ReportIntervalMDT,
-       reportAmount                            ReportAmountMDT,
-       iE-Extensions                           ProtocolExtensionContainer { {M1PeriodicReporting-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct M1PeriodicReporting : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "M1PeriodicReporting";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct reportInterval_t : ReportIntervalMDT
-       {
-               static constexpr const char* name() {return "reportInterval_t";}
-               using parent_t = ReportIntervalMDT;
-
-       };
-       reportInterval_t& ref_reportInterval() {return reportInterval;}
-       reportInterval_t const& ref_reportInterval() const {return reportInterval;}
-       struct reportAmount_t : ReportAmountMDT
-       {
-               static constexpr const char* name() {return "reportAmount_t";}
-               using parent_t = ReportAmountMDT;
-
-       };
-       reportAmount_t& ref_reportAmount() {return reportAmount;}
-       reportAmount_t const& ref_reportAmount() const {return reportAmount;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<M1PeriodicReporting_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<M1PeriodicReporting_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(reportInterval);
-               v(reportAmount);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(reportInterval);
-               v(reportAmount);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               reportInterval.clear();
-               reportAmount.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       reportInterval_t        reportInterval;
-       reportAmount_t  reportAmount;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-M1ReportingTrigger::= ENUMERATED{
-       periodic,
-       a2eventtriggered,
-       ...,
-       a2eventtriggered-periodic
-}
-*/
-
-struct M1ReportingTrigger : asn::enumerated<3, 1, true>
-{
-       static constexpr const char* name() {return "M1ReportingTrigger";}
-       using parent_t = asn::enumerated<3, 1, true>;
-       typedef enum {
-               periodic
-               ,a2eventtriggered
-               ,a2eventtriggered_periodic
-       } index_t;
-
-};
-
-/*
-Threshold-RSRP ::= INTEGER(0..97)
-*/
-
-struct Threshold_RSRP : asn::integer<>
-{
-       using constraint_t = asn::constraints<false,asn::span<0, 97>>;
-       static constexpr const char* name() {return "Threshold-RSRP";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-Threshold-RSRQ ::= INTEGER(0..34)
-*/
-
-struct Threshold_RSRQ : asn::integer<>
-{
-       using constraint_t = asn::constraints<false,asn::span<0, 34>>;
-       static constexpr const char* name() {return "Threshold-RSRQ";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-MeasurementThresholdA2 ::= CHOICE {
-       threshold-RSRP                          Threshold-RSRP,
-       threshold-RSRQ                          Threshold-RSRQ,
-       ...
-}
-*/
-
-struct MeasurementThresholdA2 : asn::choice<2, 0, true>
-{
-       static constexpr const char* name() {return "MeasurementThresholdA2";}
-       using parent_t = asn::choice<2, 0, true>;
-       index_type get_index() const {return index;}
-       bool is_unknown() const {return index == 3;}
-       void set_unknown() { set_index(3);  }
-       ~MeasurementThresholdA2() {clear();}
-       struct threshold_RSRP_t : Threshold_RSRP
-       {
-               static constexpr const char* name() {return "threshold_RSRP_t";}
-               using parent_t = Threshold_RSRP;
-
-       };
-       struct threshold_RSRQ_t : Threshold_RSRQ
-       {
-               static constexpr const char* name() {return "threshold_RSRQ_t";}
-               using parent_t = Threshold_RSRQ;
-
-       };
-       void clear()
-       {
-               switch(get_index())
-               {
-               case 1: var.destroy<threshold_RSRP_t>(); break;
-               case 2: var.destroy<threshold_RSRQ_t>(); break;
-               }
-               index = 0;
-               base::clear();
-       }
-       template<typename V> bool decode(size_t idx, V& v)
-       {
-               clear();
-               switch(idx)
-               {
-               case 1: set_index(1); return v(var.build<threshold_RSRP_t>());
-               case 2: set_index(2); return v(var.build<threshold_RSRQ_t>());
-               }
-               return false;
-
-       }
-       template<typename V> bool encode(V& v) const
-       {
-               switch(get_index())
-               {
-               case 1: return v(var.as<threshold_RSRP_t>());
-               case 2: return v(var.as<threshold_RSRQ_t>());
-               }
-               return false;
-       }
-       template<typename V> static inline void enumerate(V& v)
-       {
-               v.template operator()<threshold_RSRP_t>(1);
-               v.template operator()<threshold_RSRQ_t>(2);
-
-       }
-       threshold_RSRP_t& select_threshold_RSRP() { if(get_index() != 1) { clear(); set_index(1); return var.build<threshold_RSRP_t>();} return var.as<threshold_RSRP_t>();}
-       threshold_RSRP_t const* get_threshold_RSRP() const { if(get_index() == 1) { return &var.as<threshold_RSRP_t>();} return nullptr; }
-       threshold_RSRQ_t& select_threshold_RSRQ() { if(get_index() != 2) { clear(); set_index(2); return var.build<threshold_RSRQ_t>();} return var.as<threshold_RSRQ_t>();}
-       threshold_RSRQ_t const* get_threshold_RSRQ() const { if(get_index() == 2) { return &var.as<threshold_RSRQ_t>();} return nullptr; }
-       private:
-       void set_index(index_type i) {index = i; base::set();}
-       union union_type
-       {
-               char dummy1[sizeof(threshold_RSRP_t)];
-               char dummy2[sizeof(threshold_RSRQ_t)];
-
-       };
-       asn::variant<sizeof(union_type)>        var;
-       index_type      index {0};
-};
-/*
-M1ThresholdEventA2-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct M1ThresholdEventA2_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-M1ThresholdEventA2 ::= SEQUENCE {
-       measurementThreshold            MeasurementThresholdA2,
-       iE-Extensions                           ProtocolExtensionContainer { {M1ThresholdEventA2-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct M1ThresholdEventA2 : asn::sequence<2, 0, true, 1>
-{
-       static constexpr const char* name() {return "M1ThresholdEventA2";}
-       using parent_t = asn::sequence<2, 0, true, 1>;
-       struct measurementThreshold_t : MeasurementThresholdA2
-       {
-               static constexpr const char* name() {return "measurementThreshold_t";}
-               using parent_t = MeasurementThresholdA2;
-
-       };
-       measurementThreshold_t& ref_measurementThreshold() {return measurementThreshold;}
-       measurementThreshold_t const& ref_measurementThreshold() const {return measurementThreshold;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<M1ThresholdEventA2_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<M1ThresholdEventA2_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(measurementThreshold);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(measurementThreshold);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               measurementThreshold.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       measurementThreshold_t  measurementThreshold;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-M3period ::= ENUMERATED {ms100, ms1000, ms10000, ... }
-*/
-
-struct M3period : asn::enumerated<3, 0, true>
-{
-       static constexpr const char* name() {return "M3period";}
-       using parent_t = asn::enumerated<3, 0, true>;
-       typedef enum {
-               ms100
-               ,ms1000
-               ,ms10000
-       } index_t;
-
-};
-
-/*
-M3Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct M3Configuration_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-M3Configuration ::= SEQUENCE {
-       m3period                        M3period,
-       iE-Extensions           ProtocolExtensionContainer { {M3Configuration-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct M3Configuration : asn::sequence<2, 0, true, 1>
-{
-       static constexpr const char* name() {return "M3Configuration";}
-       using parent_t = asn::sequence<2, 0, true, 1>;
-       struct m3period_t : M3period
-       {
-               static constexpr const char* name() {return "m3period_t";}
-               using parent_t = M3period;
-
-       };
-       m3period_t& ref_m3period() {return m3period;}
-       m3period_t const& ref_m3period() const {return m3period;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<M3Configuration_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<M3Configuration_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(m3period);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(m3period);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               m3period.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       m3period_t      m3period;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-M4period ::= ENUMERATED {ms1024, ms2048, ms5120, ms10240, min1, ... }
-*/
-
-struct M4period : asn::enumerated<5, 0, true>
-{
-       static constexpr const char* name() {return "M4period";}
-       using parent_t = asn::enumerated<5, 0, true>;
-       typedef enum {
-               ms1024
-               ,ms2048
-               ,ms5120
-               ,ms10240
-               ,min1
-       } index_t;
-
-};
-
-/*
-M4Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct M4Configuration_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-M4Configuration ::= SEQUENCE {
-       m4period                        M4period,
-       m4-links-to-log         Links-to-log,
-       iE-Extensions           ProtocolExtensionContainer { {M4Configuration-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct M4Configuration : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "M4Configuration";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct m4period_t : M4period
-       {
-               static constexpr const char* name() {return "m4period_t";}
-               using parent_t = M4period;
-
-       };
-       m4period_t& ref_m4period() {return m4period;}
-       m4period_t const& ref_m4period() const {return m4period;}
-       struct m4_links_to_log_t : Links_to_log
-       {
-               static constexpr const char* name() {return "m4_links_to_log_t";}
-               using parent_t = Links_to_log;
-
-       };
-       m4_links_to_log_t& ref_m4_links_to_log() {return m4_links_to_log;}
-       m4_links_to_log_t const& ref_m4_links_to_log() const {return m4_links_to_log;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<M4Configuration_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<M4Configuration_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(m4period);
-               v(m4_links_to_log);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(m4period);
-               v(m4_links_to_log);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               m4period.clear();
-               m4_links_to_log.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       m4period_t      m4period;
-       m4_links_to_log_t       m4_links_to_log;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-M5period ::= ENUMERATED {ms1024, ms2048, ms5120, ms10240, min1, ... }
-*/
-
-struct M5period : asn::enumerated<5, 0, true>
-{
-       static constexpr const char* name() {return "M5period";}
-       using parent_t = asn::enumerated<5, 0, true>;
-       typedef enum {
-               ms1024
-               ,ms2048
-               ,ms5120
-               ,ms10240
-               ,min1
-       } index_t;
-
-};
-
-/*
-M5Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct M5Configuration_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-M5Configuration ::= SEQUENCE {
-       m5period                        M5period,
-       m5-links-to-log         Links-to-log,
-       iE-Extensions           ProtocolExtensionContainer { {M5Configuration-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct M5Configuration : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "M5Configuration";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct m5period_t : M5period
-       {
-               static constexpr const char* name() {return "m5period_t";}
-               using parent_t = M5period;
-
-       };
-       m5period_t& ref_m5period() {return m5period;}
-       m5period_t const& ref_m5period() const {return m5period;}
-       struct m5_links_to_log_t : Links_to_log
-       {
-               static constexpr const char* name() {return "m5_links_to_log_t";}
-               using parent_t = Links_to_log;
-
-       };
-       m5_links_to_log_t& ref_m5_links_to_log() {return m5_links_to_log;}
-       m5_links_to_log_t const& ref_m5_links_to_log() const {return m5_links_to_log;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<M5Configuration_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<M5Configuration_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(m5period);
-               v(m5_links_to_log);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(m5period);
-               v(m5_links_to_log);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               m5period.clear();
-               m5_links_to_log.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       m5period_t      m5period;
-       m5_links_to_log_t       m5_links_to_log;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-M6report-interval ::= ENUMERATED { ms1024, ms2048, ms5120, ms10240, ... }
-*/
-
-struct M6report_interval : asn::enumerated<4, 0, true>
-{
-       static constexpr const char* name() {return "M6report-interval";}
-       using parent_t = asn::enumerated<4, 0, true>;
-       typedef enum {
-               ms1024
-               ,ms2048
-               ,ms5120
-               ,ms10240
-       } index_t;
-
-};
-
-/*
-M6delay-threshold ::= ENUMERATED { ms30, ms40, ms50, ms60, ms70, ms80, ms90, ms100, ms150, ms300, ms500, ms750, ... }
-*/
-
-struct M6delay_threshold : asn::enumerated<12, 0, true>
-{
-       static constexpr const char* name() {return "M6delay-threshold";}
-       using parent_t = asn::enumerated<12, 0, true>;
-       typedef enum {
-               ms30
-               ,ms40
-               ,ms50
-               ,ms60
-               ,ms70
-               ,ms80
-               ,ms90
-               ,ms100
-               ,ms150
-               ,ms300
-               ,ms500
-               ,ms750
-       } index_t;
-
-};
-
-/*
-M6Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct M6Configuration_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-M6Configuration ::= SEQUENCE {
-       m6report-interval       M6report-interval,
-       m6delay-threshold       M6delay-threshold       OPTIONAL,
--- This IE shall be present if the M6 Links to log IE is set to “uplink” or to “both-uplink-and-downlink” --
-       m6-links-to-log         Links-to-log,
-       iE-Extensions           ProtocolExtensionContainer { {M6Configuration-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct M6Configuration : asn::sequence<4, 0, true, 2>
-{
-       static constexpr const char* name() {return "M6Configuration";}
-       using parent_t = asn::sequence<4, 0, true, 2>;
-       struct m6report_interval_t : M6report_interval
-       {
-               static constexpr const char* name() {return "m6report_interval_t";}
-               using parent_t = M6report_interval;
-
-       };
-       m6report_interval_t& ref_m6report_interval() {return m6report_interval;}
-       m6report_interval_t const& ref_m6report_interval() const {return m6report_interval;}
-       struct m6delay_threshold_t : M6delay_threshold
-       {
-               static constexpr const char* name() {return "m6delay_threshold_t";}
-               using parent_t = M6delay_threshold;
-               static constexpr bool optional = true;
-
-       };
-       m6delay_threshold_t& set_m6delay_threshold() { m6delay_threshold.setpresent(true); return m6delay_threshold;}
-       m6delay_threshold_t const* get_m6delay_threshold() const {return m6delay_threshold.is_valid() ? &m6delay_threshold : nullptr;}
-       struct m6_links_to_log_t : Links_to_log
-       {
-               static constexpr const char* name() {return "m6_links_to_log_t";}
-               using parent_t = Links_to_log;
-
-       };
-       m6_links_to_log_t& ref_m6_links_to_log() {return m6_links_to_log;}
-       m6_links_to_log_t const& ref_m6_links_to_log() const {return m6_links_to_log;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<M6Configuration_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<M6Configuration_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(m6report_interval);
-               v(m6delay_threshold);
-               v(m6_links_to_log);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(m6report_interval);
-               v(m6delay_threshold);
-               v(m6_links_to_log);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               m6report_interval.clear();
-               m6delay_threshold.clear();
-               m6_links_to_log.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       m6report_interval_t     m6report_interval;
-       m6delay_threshold_t     m6delay_threshold;
-       m6_links_to_log_t       m6_links_to_log;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-M7period ::= INTEGER(1..60, ...)
-*/
-
-struct M7period : asn::integer<>
-{
-       using constraint_t = asn::constraints<true,asn::span<1, 60>>;
-       static constexpr const char* name() {return "M7period";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-M7Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct M7Configuration_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-M7Configuration ::= SEQUENCE {
-       m7period                        M7period,
-       m7-links-to-log         Links-to-log,
-       iE-Extensions           ProtocolExtensionContainer { {M7Configuration-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct M7Configuration : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "M7Configuration";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct m7period_t : M7period
-       {
-               static constexpr const char* name() {return "m7period_t";}
-               using parent_t = M7period;
-
-       };
-       m7period_t& ref_m7period() {return m7period;}
-       m7period_t const& ref_m7period() const {return m7period;}
-       struct m7_links_to_log_t : Links_to_log
-       {
-               static constexpr const char* name() {return "m7_links_to_log_t";}
-               using parent_t = Links_to_log;
-
-       };
-       m7_links_to_log_t& ref_m7_links_to_log() {return m7_links_to_log;}
-       m7_links_to_log_t const& ref_m7_links_to_log() const {return m7_links_to_log;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<M7Configuration_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<M7Configuration_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(m7period);
-               v(m7_links_to_log);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(m7period);
-               v(m7_links_to_log);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               m7period.clear();
-               m7_links_to_log.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       m7period_t      m7period;
-       m7_links_to_log_t       m7_links_to_log;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-MBMS-Service-Area-Identity ::= OCTET STRING (SIZE (2))
-*/
-
-struct MBMS_Service_Area_Identity : asn::ostring<>
-{
-       using constraint_t = asn::constraints<false,asn::one<2>>;
-       static constexpr const char* name() {return "MBMS-Service-Area-Identity";}
-       using parent_t = asn::ostring<>;
-
-};
-
-/*
-MBMS-Service-Area-Identity-List ::= SEQUENCE (SIZE(1.. maxnoofMBMSServiceAreaIdentities)) OF MBMS-Service-Area-Identity
-*/
-
-struct MBMS_Service_Area_Identity_List_elm : MBMS_Service_Area_Identity
-{
-       static constexpr const char* name() {return "MBMS_Service_Area_Identity_List_elm";}
-       using parent_t = MBMS_Service_Area_Identity;
-
-};
-struct MBMS_Service_Area_Identity_List : asn::sequenceof<MBMS_Service_Area_Identity_List_elm>
-{
-       static constexpr const char* name() {return "MBMS-Service-Area-Identity-List";}
-       using parent_t = asn::sequenceof<MBMS_Service_Area_Identity_List_elm>;
-       using constraint_t = asn::constraints<false,asn::span<1,  maxnoofMBMSServiceAreaIdentities >>;
-
-};
-/*
-RadioframeAllocationPeriod ::= ENUMERATED{
-       n1,
-       n2,
-       n4,
-       n8,
-       n16,
-       n32,
-       ...
-}
-*/
-
-struct RadioframeAllocationPeriod : asn::enumerated<6, 0, true>
-{
-       static constexpr const char* name() {return "RadioframeAllocationPeriod";}
-       using parent_t = asn::enumerated<6, 0, true>;
-       typedef enum {
-               n1
-               ,n2
-               ,n4
-               ,n8
-               ,n16
-               ,n32
-       } index_t;
-
-};
-
-/*
-RadioframeAllocationOffset ::= INTEGER (0..7, ...)
-*/
-
-struct RadioframeAllocationOffset : asn::integer<>
-{
-       using constraint_t = asn::constraints<true,asn::span<0, 7>>;
-       static constexpr const char* name() {return "RadioframeAllocationOffset";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-Oneframe ::= BIT STRING (SIZE (6))
-*/
-
-struct Oneframe : asn::bstring<>
-{
-       using constraint_t = asn::constraints<false,asn::one<6>>;
-       static constexpr const char* name() {return "Oneframe";}
-       using parent_t = asn::bstring<>;
-
-};
-
-/*
-SubframeAllocation ::= CHOICE {
-       oneframe                                                Oneframe,
-       fourframes                                              Fourframes,
-       ...
-}
-*/
-
-struct SubframeAllocation : asn::choice<2, 0, true>
-{
-       static constexpr const char* name() {return "SubframeAllocation";}
-       using parent_t = asn::choice<2, 0, true>;
-       index_type get_index() const {return index;}
-       bool is_unknown() const {return index == 3;}
-       void set_unknown() { set_index(3);  }
-       ~SubframeAllocation() {clear();}
-       struct oneframe_t : Oneframe
-       {
-               static constexpr const char* name() {return "oneframe_t";}
-               using parent_t = Oneframe;
-
-       };
-       struct fourframes_t : Fourframes
-       {
-               static constexpr const char* name() {return "fourframes_t";}
-               using parent_t = Fourframes;
-
-       };
-       void clear()
-       {
-               switch(get_index())
-               {
-               case 1: var.destroy<oneframe_t>(); break;
-               case 2: var.destroy<fourframes_t>(); break;
-               }
-               index = 0;
-               base::clear();
-       }
-       template<typename V> bool decode(size_t idx, V& v)
-       {
-               clear();
-               switch(idx)
-               {
-               case 1: set_index(1); return v(var.build<oneframe_t>());
-               case 2: set_index(2); return v(var.build<fourframes_t>());
-               }
-               return false;
-
-       }
-       template<typename V> bool encode(V& v) const
-       {
-               switch(get_index())
-               {
-               case 1: return v(var.as<oneframe_t>());
-               case 2: return v(var.as<fourframes_t>());
-               }
-               return false;
-       }
-       template<typename V> static inline void enumerate(V& v)
-       {
-               v.template operator()<oneframe_t>(1);
-               v.template operator()<fourframes_t>(2);
-
-       }
-       oneframe_t& select_oneframe() { if(get_index() != 1) { clear(); set_index(1); return var.build<oneframe_t>();} return var.as<oneframe_t>();}
-       oneframe_t const* get_oneframe() const { if(get_index() == 1) { return &var.as<oneframe_t>();} return nullptr; }
-       fourframes_t& select_fourframes() { if(get_index() != 2) { clear(); set_index(2); return var.build<fourframes_t>();} return var.as<fourframes_t>();}
-       fourframes_t const* get_fourframes() const { if(get_index() == 2) { return &var.as<fourframes_t>();} return nullptr; }
-       private:
-       void set_index(index_type i) {index = i; base::set();}
-       union union_type
-       {
-               char dummy1[sizeof(oneframe_t)];
-               char dummy2[sizeof(fourframes_t)];
-
-       };
-       asn::variant<sizeof(union_type)>        var;
-       index_type      index {0};
-};
-/*
-MBSFN-Subframe-Info-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct MBSFN_Subframe_Info_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-MBSFN-Subframe-Info    ::= SEQUENCE {
-       radioframeAllocationPeriod              RadioframeAllocationPeriod,
-       radioframeAllocationOffset              RadioframeAllocationOffset,
-       subframeAllocation                              SubframeAllocation,
-       iE-Extensions                                   ProtocolExtensionContainer { {MBSFN-Subframe-Info-ExtIEs} }     OPTIONAL,
-       ...
-}
-*/
-
-struct MBSFN_Subframe_Info : asn::sequence<4, 0, true, 1>
-{
-       static constexpr const char* name() {return "MBSFN-Subframe-Info";}
-       using parent_t = asn::sequence<4, 0, true, 1>;
-       struct radioframeAllocationPeriod_t : RadioframeAllocationPeriod
-       {
-               static constexpr const char* name() {return "radioframeAllocationPeriod_t";}
-               using parent_t = RadioframeAllocationPeriod;
-
-       };
-       radioframeAllocationPeriod_t& ref_radioframeAllocationPeriod() {return radioframeAllocationPeriod;}
-       radioframeAllocationPeriod_t const& ref_radioframeAllocationPeriod() const {return radioframeAllocationPeriod;}
-       struct radioframeAllocationOffset_t : RadioframeAllocationOffset
-       {
-               static constexpr const char* name() {return "radioframeAllocationOffset_t";}
-               using parent_t = RadioframeAllocationOffset;
-
-       };
-       radioframeAllocationOffset_t& ref_radioframeAllocationOffset() {return radioframeAllocationOffset;}
-       radioframeAllocationOffset_t const& ref_radioframeAllocationOffset() const {return radioframeAllocationOffset;}
-       struct subframeAllocation_t : SubframeAllocation
-       {
-               static constexpr const char* name() {return "subframeAllocation_t";}
-               using parent_t = SubframeAllocation;
-
-       };
-       subframeAllocation_t& ref_subframeAllocation() {return subframeAllocation;}
-       subframeAllocation_t const& ref_subframeAllocation() const {return subframeAllocation;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<MBSFN_Subframe_Info_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<MBSFN_Subframe_Info_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(radioframeAllocationPeriod);
-               v(radioframeAllocationOffset);
-               v(subframeAllocation);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(radioframeAllocationPeriod);
-               v(radioframeAllocationOffset);
-               v(subframeAllocation);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               radioframeAllocationPeriod.clear();
-               radioframeAllocationOffset.clear();
-               subframeAllocation.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       radioframeAllocationPeriod_t    radioframeAllocationPeriod;
-       radioframeAllocationOffset_t    radioframeAllocationOffset;
-       subframeAllocation_t    subframeAllocation;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-MBSFN-Subframe-Infolist::= SEQUENCE (SIZE(1.. maxnoofMBSFN)) OF MBSFN-Subframe-Info
-*/
-
-struct MBSFN_Subframe_Infolist_elm : MBSFN_Subframe_Info
-{
-       static constexpr const char* name() {return "MBSFN_Subframe_Infolist_elm";}
-       using parent_t = MBSFN_Subframe_Info;
-
-};
-struct MBSFN_Subframe_Infolist : asn::sequenceof<MBSFN_Subframe_Infolist_elm>
-{
-       static constexpr const char* name() {return "MBSFN-Subframe-Infolist";}
-       using parent_t = asn::sequenceof<MBSFN_Subframe_Infolist_elm>;
-       using constraint_t = asn::constraints<false,asn::span<1,  maxnoofMBSFN >>;
-
-};
-/*
-MDT-Activation         ::= ENUMERATED {
-       immediate-MDT-only,
-       immediate-MDT-and-Trace,
-       ...
-}
-*/
-
-struct MDT_Activation : asn::enumerated<2, 0, true>
-{
-       static constexpr const char* name() {return "MDT-Activation";}
-       using parent_t = asn::enumerated<2, 0, true>;
-       typedef enum {
-               immediate_MDT_only
-               ,immediate_MDT_and_Trace
-       } index_t;
-
-};
-
-/*
-MeasurementsToActivate::= BIT STRING (SIZE (8))
-*/
-
-struct MeasurementsToActivate : asn::bstring<>
-{
-       using constraint_t = asn::constraints<false,asn::one<8>>;
-       static constexpr const char* name() {return "MeasurementsToActivate";}
-       using parent_t = asn::bstring<>;
-
-};
-
-/*
-MDT-Location-Info ::= BIT STRING (SIZE (8))
-*/
-
-struct MDT_Location_Info : asn::bstring<>
-{
-       using constraint_t = asn::constraints<false,asn::one<8>>;
-       static constexpr const char* name() {return "MDT-Location-Info";}
-       using parent_t = asn::bstring<>;
-
-};
-
-/*
-MDTPLMNList ::= SEQUENCE (SIZE(1..maxnoofMDTPLMNs)) OF PLMN-Identity
-*/
-
-struct MDTPLMNList_elm : PLMN_Identity
-{
-       static constexpr const char* name() {return "MDTPLMNList_elm";}
-       using parent_t = PLMN_Identity;
-
-};
-struct MDTPLMNList : asn::sequenceof<MDTPLMNList_elm>
-{
-       static constexpr const char* name() {return "MDTPLMNList";}
-       using parent_t = asn::sequenceof<MDTPLMNList_elm>;
-       using constraint_t = asn::constraints<false,asn::span<1,  maxnoofMDTPLMNs >>;
-
-};
-/*
-WLANMeasConfig::= ENUMERATED {setup,...}
-*/
-
-struct WLANMeasConfig : asn::enumerated<1, 0, true>
-{
-       static constexpr const char* name() {return "WLANMeasConfig";}
-       using parent_t = asn::enumerated<1, 0, true>;
-       typedef enum {
-               setup
-       } index_t;
-
-};
-
-/*
-WLANName ::= OCTET STRING (SIZE (1..32))
-*/
-
-struct WLANName : asn::ostring<>
-{
-       using constraint_t = asn::constraints<false,asn::span<1, 32>>;
-       static constexpr const char* name() {return "WLANName";}
-       using parent_t = asn::ostring<>;
-
-};
-
-/*
-WLANMeasConfigNameList ::= SEQUENCE (SIZE(1..maxnoofWLANName)) OF WLANName
-*/
-
-struct WLANMeasConfigNameList_elm : WLANName
-{
-       static constexpr const char* name() {return "WLANMeasConfigNameList_elm";}
-       using parent_t = WLANName;
-
-};
-struct WLANMeasConfigNameList : asn::sequenceof<WLANMeasConfigNameList_elm>
-{
-       static constexpr const char* name() {return "WLANMeasConfigNameList";}
-       using parent_t = asn::sequenceof<WLANMeasConfigNameList_elm>;
-       using constraint_t = asn::constraints<false,asn::span<1,  maxnoofWLANName >>;
-
-};
-/*
-WLANMeasurementConfiguration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct WLANMeasurementConfiguration_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-WLANMeasurementConfiguration ::= SEQUENCE {
-       wlanMeasConfig                          WLANMeasConfig,
-       wlanMeasConfigNameList          WLANMeasConfigNameList                          OPTIONAL,
-       wlan-rssi                                       ENUMERATED {true, ...}                          OPTIONAL,
-       wlan-rtt                                        ENUMERATED {true, ...}                          OPTIONAL,
-       iE-Extensions           ProtocolExtensionContainer { {WLANMeasurementConfiguration-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct WLANMeasurementConfiguration : asn::sequence<5, 0, true, 4>
-{
-       static constexpr const char* name() {return "WLANMeasurementConfiguration";}
-       using parent_t = asn::sequence<5, 0, true, 4>;
-       struct wlanMeasConfig_t : WLANMeasConfig
-       {
-               static constexpr const char* name() {return "wlanMeasConfig_t";}
-               using parent_t = WLANMeasConfig;
-
-       };
-       wlanMeasConfig_t& ref_wlanMeasConfig() {return wlanMeasConfig;}
-       wlanMeasConfig_t const& ref_wlanMeasConfig() const {return wlanMeasConfig;}
-       struct wlanMeasConfigNameList_t : WLANMeasConfigNameList
-       {
-               static constexpr const char* name() {return "wlanMeasConfigNameList_t";}
-               using parent_t = WLANMeasConfigNameList;
-               static constexpr bool optional = true;
-
-       };
-       wlanMeasConfigNameList_t& set_wlanMeasConfigNameList() { wlanMeasConfigNameList.setpresent(true); return wlanMeasConfigNameList;}
-       wlanMeasConfigNameList_t const* get_wlanMeasConfigNameList() const {return wlanMeasConfigNameList.is_valid() ? &wlanMeasConfigNameList : nullptr;}
-       struct wlan_rssi_t : asn::enumerated<1, 0, true>
-       {
-               static constexpr const char* name() {return "wlan_rssi_t";}
-               using parent_t = asn::enumerated<1, 0, true>;
-               static constexpr bool optional = true;
-               typedef enum {
-                       True
-               } index_t;
-
-       };
-
-       wlan_rssi_t& set_wlan_rssi() { wlan_rssi.setpresent(true); return wlan_rssi;}
-       wlan_rssi_t const* get_wlan_rssi() const {return wlan_rssi.is_valid() ? &wlan_rssi : nullptr;}
-       struct wlan_rtt_t : asn::enumerated<1, 0, true>
-       {
-               static constexpr const char* name() {return "wlan_rtt_t";}
-               using parent_t = asn::enumerated<1, 0, true>;
-               static constexpr bool optional = true;
-               typedef enum {
-                       True
-               } index_t;
-
-       };
-
-       wlan_rtt_t& set_wlan_rtt() { wlan_rtt.setpresent(true); return wlan_rtt;}
-       wlan_rtt_t const* get_wlan_rtt() const {return wlan_rtt.is_valid() ? &wlan_rtt : nullptr;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<WLANMeasurementConfiguration_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<WLANMeasurementConfiguration_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(wlanMeasConfig);
-               v(wlanMeasConfigNameList);
-               v(wlan_rssi);
-               v(wlan_rtt);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(wlanMeasConfig);
-               v(wlanMeasConfigNameList);
-               v(wlan_rssi);
-               v(wlan_rtt);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               wlanMeasConfig.clear();
-               wlanMeasConfigNameList.clear();
-               wlan_rssi.clear();
-               wlan_rtt.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       wlanMeasConfig_t        wlanMeasConfig;
-       wlanMeasConfigNameList_t        wlanMeasConfigNameList;
-       wlan_rssi_t     wlan_rssi;
-       wlan_rtt_t      wlan_rtt;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-MDT-Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       {ID id-M3Configuration                                                  CRITICALITY ignore      EXTENSION M3Configuration                                                               PRESENCE conditional}|
-       {ID id-M4Configuration                                                  CRITICALITY ignore      EXTENSION M4Configuration                                                               PRESENCE conditional}|
-       {ID id-M5Configuration                                                  CRITICALITY ignore      EXTENSION M5Configuration                                                               PRESENCE conditional}|
-       {ID id-MDT-Location-Info                                                CRITICALITY ignore      EXTENSION MDT-Location-Info                                                     PRESENCE optional}|
-       {ID id-SignallingBasedMDTPLMNList                               CRITICALITY ignore      EXTENSION MDTPLMNList                                                                   PRESENCE optional}|
-       {ID id-M6Configuration                                                  CRITICALITY ignore      EXTENSION M6Configuration                                                               PRESENCE conditional}|
-       {ID id-M7Configuration                                                  CRITICALITY ignore      EXTENSION M7Configuration                                                               PRESENCE conditional}|
-       { ID id-BluetoothMeasurementConfiguration               CRITICALITY ignore      EXTENSION BluetoothMeasurementConfiguration             PRESENCE optional}|
-       { ID id-WLANMeasurementConfiguration                    CRITICALITY ignore      EXTENSION WLANMeasurementConfiguration                  PRESENCE optional},
-       ...
-}
-*/
-
-struct MDT_Configuration_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 10; }
-               void clear() {type = 0;}
-               void select_id_M3Configuration() { set(id_M3Configuration); type=1;}
-               void select_id_M4Configuration() { set(id_M4Configuration); type=2;}
-               void select_id_M5Configuration() { set(id_M5Configuration); type=3;}
-               void select_id_MDT_Location_Info() { set(id_MDT_Location_Info); type=4;}
-               void select_id_SignallingBasedMDTPLMNList() { set(id_SignallingBasedMDTPLMNList); type=5;}
-               void select_id_M6Configuration() { set(id_M6Configuration); type=6;}
-               void select_id_M7Configuration() { set(id_M7Configuration); type=7;}
-               void select_id_BluetoothMeasurementConfiguration() { set(id_BluetoothMeasurementConfiguration); type=8;}
-               void select_id_WLANMeasurementConfiguration() { set(id_WLANMeasurementConfiguration); type=9;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(id_M3Configuration)) { type = 1; return true; }
-                       else if(equal(id_M4Configuration)) { type = 2; return true; }
-                       else if(equal(id_M5Configuration)) { type = 3; return true; }
-                       else if(equal(id_MDT_Location_Info)) { type = 4; return true; }
-                       else if(equal(id_SignallingBasedMDTPLMNList)) { type = 5; return true; }
-                       else if(equal(id_M6Configuration)) { type = 6; return true; }
-                       else if(equal(id_M7Configuration)) { type = 7; return true; }
-                       else if(equal(id_BluetoothMeasurementConfiguration)) { type = 8; return true; }
-                       else if(equal(id_WLANMeasurementConfiguration)) { type = 9; return true; }
-                       else { type = 10; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(id_M3Configuration);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(id_M4Configuration);} return false;
-                       case 3: type = 3; if(v(ref_nested())) { return equal(id_M5Configuration);} return false;
-                       case 4: type = 4; if(v(ref_nested())) { return equal(id_MDT_Location_Info);} return false;
-                       case 5: type = 5; if(v(ref_nested())) { return equal(id_SignallingBasedMDTPLMNList);} return false;
-                       case 6: type = 6; if(v(ref_nested())) { return equal(id_M6Configuration);} return false;
-                       case 7: type = 7; if(v(ref_nested())) { return equal(id_M7Configuration);} return false;
-                       case 8: type = 8; if(v(ref_nested())) { return equal(id_BluetoothMeasurementConfiguration);} return false;
-                       case 9: type = 9; if(v(ref_nested())) { return equal(id_WLANMeasurementConfiguration);} return false;
-                       case 10: type = 10; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 10; }
-               void clear() {type = 0;}
-               void select_id_M3Configuration() { set(ignore); type=1;}
-               void select_id_M4Configuration() { set(ignore); type=2;}
-               void select_id_M5Configuration() { set(ignore); type=3;}
-               void select_id_MDT_Location_Info() { set(ignore); type=4;}
-               void select_id_SignallingBasedMDTPLMNList() { set(ignore); type=5;}
-               void select_id_M6Configuration() { set(ignore); type=6;}
-               void select_id_M7Configuration() { set(ignore); type=7;}
-               void select_id_BluetoothMeasurementConfiguration() { set(ignore); type=8;}
-               void select_id_WLANMeasurementConfiguration() { set(ignore); type=9;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(ignore)) { type = 1; return true; }
-                       else if(equal(ignore)) { type = 2; return true; }
-                       else if(equal(ignore)) { type = 3; return true; }
-                       else if(equal(ignore)) { type = 4; return true; }
-                       else if(equal(ignore)) { type = 5; return true; }
-                       else if(equal(ignore)) { type = 6; return true; }
-                       else if(equal(ignore)) { type = 7; return true; }
-                       else if(equal(ignore)) { type = 8; return true; }
-                       else if(equal(ignore)) { type = 9; return true; }
-                       else { type = 10; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 10: type = 10; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               M3Configuration& select_id_M3Configuration() { return set<M3Configuration>(1); }
-               M3Configuration const* get_id_M3Configuration() const { return get<M3Configuration>(1); }
-               M4Configuration& select_id_M4Configuration() { return set<M4Configuration>(2); }
-               M4Configuration const* get_id_M4Configuration() const { return get<M4Configuration>(2); }
-               M5Configuration& select_id_M5Configuration() { return set<M5Configuration>(3); }
-               M5Configuration const* get_id_M5Configuration() const { return get<M5Configuration>(3); }
-               MDT_Location_Info& select_id_MDT_Location_Info() { return set<MDT_Location_Info>(4); }
-               MDT_Location_Info const* get_id_MDT_Location_Info() const { return get<MDT_Location_Info>(4); }
-               MDTPLMNList& select_id_SignallingBasedMDTPLMNList() { return set<MDTPLMNList>(5); }
-               MDTPLMNList const* get_id_SignallingBasedMDTPLMNList() const { return get<MDTPLMNList>(5); }
-               M6Configuration& select_id_M6Configuration() { return set<M6Configuration>(6); }
-               M6Configuration const* get_id_M6Configuration() const { return get<M6Configuration>(6); }
-               M7Configuration& select_id_M7Configuration() { return set<M7Configuration>(7); }
-               M7Configuration const* get_id_M7Configuration() const { return get<M7Configuration>(7); }
-               BluetoothMeasurementConfiguration& select_id_BluetoothMeasurementConfiguration() { return set<BluetoothMeasurementConfiguration>(8); }
-               BluetoothMeasurementConfiguration const* get_id_BluetoothMeasurementConfiguration() const { return get<BluetoothMeasurementConfiguration>(8); }
-               WLANMeasurementConfiguration& select_id_WLANMeasurementConfiguration() { return set<WLANMeasurementConfiguration>(9); }
-               WLANMeasurementConfiguration const* get_id_WLANMeasurementConfiguration() const { return get<WLANMeasurementConfiguration>(9); }
-               bool is_unknown() const { return type == 10; }
-               void clear()
-               {
-                       switch(type)
-                       {
-                       case 1: var.destroy<M3Configuration>(); break;
-                       case 2: var.destroy<M4Configuration>(); break;
-                       case 3: var.destroy<M5Configuration>(); break;
-                       case 4: var.destroy<MDT_Location_Info>(); break;
-                       case 5: var.destroy<MDTPLMNList>(); break;
-                       case 6: var.destroy<M6Configuration>(); break;
-                       case 7: var.destroy<M7Configuration>(); break;
-                       case 8: var.destroy<BluetoothMeasurementConfiguration>(); break;
-                       case 9: var.destroy<WLANMeasurementConfiguration>(); break;
-                       }
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-                       v.template operator()<M3Configuration>(1);
-                       v.template operator()<M4Configuration>(2);
-                       v.template operator()<M5Configuration>(3);
-                       v.template operator()<MDT_Location_Info>(4);
-                       v.template operator()<MDTPLMNList>(5);
-                       v.template operator()<M6Configuration>(6);
-                       v.template operator()<M7Configuration>(7);
-                       v.template operator()<BluetoothMeasurementConfiguration>(8);
-                       v.template operator()<WLANMeasurementConfiguration>(9);
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: v(select_id_M3Configuration()); return true;
-                       case 2: v(select_id_M4Configuration()); return true;
-                       case 3: v(select_id_M5Configuration()); return true;
-                       case 4: v(select_id_MDT_Location_Info()); return true;
-                       case 5: v(select_id_SignallingBasedMDTPLMNList()); return true;
-                       case 6: v(select_id_M6Configuration()); return true;
-                       case 7: v(select_id_M7Configuration()); return true;
-                       case 8: v(select_id_BluetoothMeasurementConfiguration()); return true;
-                       case 9: v(select_id_WLANMeasurementConfiguration()); return true;
-                       case 10: if(type != 10) {clear(); asn::base::set();} type = 10; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       switch(type)
-                       {
-                       case 1: v(var.as<M3Configuration>()); return true;
-                       case 2: v(var.as<M4Configuration>()); return true;
-                       case 3: v(var.as<M5Configuration>()); return true;
-                       case 4: v(var.as<MDT_Location_Info>()); return true;
-                       case 5: v(var.as<MDTPLMNList>()); return true;
-                       case 6: v(var.as<M6Configuration>()); return true;
-                       case 7: v(var.as<M7Configuration>()); return true;
-                       case 8: v(var.as<BluetoothMeasurementConfiguration>()); return true;
-                       case 9: v(var.as<WLANMeasurementConfiguration>()); return true;
-                       }
-                       return false;
-
-               }
-               private:
-               template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
-               template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
-               union union_type
-               {
-                       char dummy1[sizeof(BluetoothMeasurementConfiguration)];
-                       char dummy2[sizeof(M3Configuration)];
-                       char dummy3[sizeof(M4Configuration)];
-                       char dummy4[sizeof(M5Configuration)];
-                       char dummy5[sizeof(M6Configuration)];
-                       char dummy6[sizeof(M7Configuration)];
-                       char dummy7[sizeof(MDTPLMNList)];
-                       char dummy8[sizeof(MDT_Location_Info)];
-                       char dummy9[sizeof(WLANMeasurementConfiguration)];
-
-               };
-               asn::variant<sizeof(union_type)> var;
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 10; }
-               void clear() {type = 0;}
-               void select_id_M3Configuration() { set(conditional); type=1;}
-               void select_id_M4Configuration() { set(conditional); type=2;}
-               void select_id_M5Configuration() { set(conditional); type=3;}
-               void select_id_MDT_Location_Info() { set(optional); type=4;}
-               void select_id_SignallingBasedMDTPLMNList() { set(optional); type=5;}
-               void select_id_M6Configuration() { set(conditional); type=6;}
-               void select_id_M7Configuration() { set(conditional); type=7;}
-               void select_id_BluetoothMeasurementConfiguration() { set(optional); type=8;}
-               void select_id_WLANMeasurementConfiguration() { set(optional); type=9;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(conditional)) { type = 1; return true; }
-                       else if(equal(conditional)) { type = 2; return true; }
-                       else if(equal(conditional)) { type = 3; return true; }
-                       else if(equal(optional)) { type = 4; return true; }
-                       else if(equal(optional)) { type = 5; return true; }
-                       else if(equal(conditional)) { type = 6; return true; }
-                       else if(equal(conditional)) { type = 7; return true; }
-                       else if(equal(optional)) { type = 8; return true; }
-                       else if(equal(optional)) { type = 9; return true; }
-                       else { type = 10; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(conditional);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(conditional);} return false;
-                       case 3: type = 3; if(v(ref_nested())) { return equal(conditional);} return false;
-                       case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 6: type = 6; if(v(ref_nested())) { return equal(conditional);} return false;
-                       case 7: type = 7; if(v(ref_nested())) { return equal(conditional);} return false;
-                       case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 10: type = 10; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-MDT-Configuration ::= SEQUENCE {
-       mdt-Activation                          MDT-Activation,
-       areaScopeOfMDT                          AreaScopeOfMDT,
-       measurementsToActivate          MeasurementsToActivate,
-       m1reportingTrigger                      M1ReportingTrigger,
-       m1thresholdeventA2                      M1ThresholdEventA2                      OPTIONAL,
--- Included in case of event-triggered, or event-triggered periodic reporting for measurement M1
-       m1periodicReporting                     M1PeriodicReporting                     OPTIONAL,
--- Included in case of periodic, or event-triggered periodic reporting for measurement M1
-       iE-Extensions                           ProtocolExtensionContainer { {MDT-Configuration-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct MDT_Configuration : asn::sequence<7, 0, true, 3>
-{
-       static constexpr const char* name() {return "MDT-Configuration";}
-       using parent_t = asn::sequence<7, 0, true, 3>;
-       struct mdt_Activation_t : MDT_Activation
-       {
-               static constexpr const char* name() {return "mdt_Activation_t";}
-               using parent_t = MDT_Activation;
-
-       };
-       mdt_Activation_t& ref_mdt_Activation() {return mdt_Activation;}
-       mdt_Activation_t const& ref_mdt_Activation() const {return mdt_Activation;}
-       struct areaScopeOfMDT_t : AreaScopeOfMDT
-       {
-               static constexpr const char* name() {return "areaScopeOfMDT_t";}
-               using parent_t = AreaScopeOfMDT;
-
-       };
-       areaScopeOfMDT_t& ref_areaScopeOfMDT() {return areaScopeOfMDT;}
-       areaScopeOfMDT_t const& ref_areaScopeOfMDT() const {return areaScopeOfMDT;}
-       struct measurementsToActivate_t : MeasurementsToActivate
-       {
-               static constexpr const char* name() {return "measurementsToActivate_t";}
-               using parent_t = MeasurementsToActivate;
-
-       };
-       measurementsToActivate_t& ref_measurementsToActivate() {return measurementsToActivate;}
-       measurementsToActivate_t const& ref_measurementsToActivate() const {return measurementsToActivate;}
-       struct m1reportingTrigger_t : M1ReportingTrigger
-       {
-               static constexpr const char* name() {return "m1reportingTrigger_t";}
-               using parent_t = M1ReportingTrigger;
-
-       };
-       m1reportingTrigger_t& ref_m1reportingTrigger() {return m1reportingTrigger;}
-       m1reportingTrigger_t const& ref_m1reportingTrigger() const {return m1reportingTrigger;}
-       struct m1thresholdeventA2_t : M1ThresholdEventA2
-       {
-               static constexpr const char* name() {return "m1thresholdeventA2_t";}
-               using parent_t = M1ThresholdEventA2;
-               static constexpr bool optional = true;
-
-       };
-       m1thresholdeventA2_t& set_m1thresholdeventA2() { m1thresholdeventA2.setpresent(true); return m1thresholdeventA2;}
-       m1thresholdeventA2_t const* get_m1thresholdeventA2() const {return m1thresholdeventA2.is_valid() ? &m1thresholdeventA2 : nullptr;}
-       struct m1periodicReporting_t : M1PeriodicReporting
-       {
-               static constexpr const char* name() {return "m1periodicReporting_t";}
-               using parent_t = M1PeriodicReporting;
-               static constexpr bool optional = true;
-
-       };
-       m1periodicReporting_t& set_m1periodicReporting() { m1periodicReporting.setpresent(true); return m1periodicReporting;}
-       m1periodicReporting_t const* get_m1periodicReporting() const {return m1periodicReporting.is_valid() ? &m1periodicReporting : nullptr;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<MDT_Configuration_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<MDT_Configuration_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(mdt_Activation);
-               v(areaScopeOfMDT);
-               v(measurementsToActivate);
-               v(m1reportingTrigger);
-               v(m1thresholdeventA2);
-               v(m1periodicReporting);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(mdt_Activation);
-               v(areaScopeOfMDT);
-               v(measurementsToActivate);
-               v(m1reportingTrigger);
-               v(m1thresholdeventA2);
-               v(m1periodicReporting);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               mdt_Activation.clear();
-               areaScopeOfMDT.clear();
-               measurementsToActivate.clear();
-               m1reportingTrigger.clear();
-               m1thresholdeventA2.clear();
-               m1periodicReporting.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       mdt_Activation_t        mdt_Activation;
-       areaScopeOfMDT_t        areaScopeOfMDT;
-       measurementsToActivate_t        measurementsToActivate;
-       m1reportingTrigger_t    m1reportingTrigger;
-       m1thresholdeventA2_t    m1thresholdeventA2;
-       m1periodicReporting_t   m1periodicReporting;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-MakeBeforeBreakIndicator::= ENUMERATED {true, ...}
-*/
-
-struct MakeBeforeBreakIndicator : asn::enumerated<1, 0, true>
-{
-       static constexpr const char* name() {return "MakeBeforeBreakIndicator";}
-       using parent_t = asn::enumerated<1, 0, true>;
-       typedef enum {
-               True
-       } index_t;
-
-};
-
-/*
-ManagementBasedMDTallowed ::= ENUMERATED {allowed, ...}
-*/
-
-struct ManagementBasedMDTallowed : asn::enumerated<1, 0, true>
-{
-       static constexpr const char* name() {return "ManagementBasedMDTallowed";}
-       using parent_t = asn::enumerated<1, 0, true>;
-       typedef enum {
-               allowed
-       } index_t;
-
-};
-
-/*
-Masked-IMEISV ::= BIT STRING (SIZE (64))
-*/
-
-struct Masked_IMEISV : asn::bstring<>
-{
-       using constraint_t = asn::constraints<false,asn::one<64>>;
-       static constexpr const char* name() {return "Masked-IMEISV";}
-       using parent_t = asn::bstring<>;
-
-};
-
-/*
-MeNBCoordinationAssistanceInformation ::= ENUMERATED{
-       coordination-not-required,
-       ...
-}
-*/
-
-struct MeNBCoordinationAssistanceInformation : asn::enumerated<1, 0, true>
-{
-       static constexpr const char* name() {return "MeNBCoordinationAssistanceInformation";}
-       using parent_t = asn::enumerated<1, 0, true>;
-       typedef enum {
-               coordination_not_required
-       } index_t;
-
-};
-
-/*
-NRCellIdentifier ::= BIT STRING (SIZE (36))
-*/
-
-struct NRCellIdentifier : asn::bstring<>
-{
-       using constraint_t = asn::constraints<false,asn::one<36>>;
-       static constexpr const char* name() {return "NRCellIdentifier";}
-       using parent_t = asn::bstring<>;
-
-};
-
-/*
-NRCGI-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct NRCGI_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-NRCGI ::= SEQUENCE {
-       pLMN-Identity                           PLMN-Identity,
-       nRcellIdentifier                                NRCellIdentifier,
-       iE-Extensions                           ProtocolExtensionContainer { {NRCGI-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct NRCGI : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "NRCGI";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct pLMN_Identity_t : PLMN_Identity
-       {
-               static constexpr const char* name() {return "pLMN_Identity_t";}
-               using parent_t = PLMN_Identity;
-
-       };
-       pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;}
-       pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;}
-       struct nRcellIdentifier_t : NRCellIdentifier
-       {
-               static constexpr const char* name() {return "nRcellIdentifier_t";}
-               using parent_t = NRCellIdentifier;
-
-       };
-       nRcellIdentifier_t& ref_nRcellIdentifier() {return nRcellIdentifier;}
-       nRcellIdentifier_t const& ref_nRcellIdentifier() const {return nRcellIdentifier;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<NRCGI_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<NRCGI_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(pLMN_Identity);
-               v(nRcellIdentifier);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(pLMN_Identity);
-               v(nRcellIdentifier);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               pLMN_Identity.clear();
-               nRcellIdentifier.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       pLMN_Identity_t pLMN_Identity;
-       nRcellIdentifier_t      nRcellIdentifier;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-MeNBResourceCoordinationInformationExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       { ID id-NRCGI                                                                   CRITICALITY ignore      EXTENSION NRCGI                                                                                         PRESENCE optional}|
-       { ID id-MeNBCoordinationAssistanceInformation           CRITICALITY reject      EXTENSION MeNBCoordinationAssistanceInformation PRESENCE optional},
-       ...
-}
-*/
-
-struct MeNBResourceCoordinationInformationExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 3; }
-               void clear() {type = 0;}
-               void select_id_NRCGI() { set(id_NRCGI); type=1;}
-               void select_id_MeNBCoordinationAssistanceInformation() { set(id_MeNBCoordinationAssistanceInformation); type=2;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(id_NRCGI)) { type = 1; return true; }
-                       else if(equal(id_MeNBCoordinationAssistanceInformation)) { type = 2; return true; }
-                       else { type = 3; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(id_NRCGI);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(id_MeNBCoordinationAssistanceInformation);} return false;
-                       case 3: type = 3; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 3; }
-               void clear() {type = 0;}
-               void select_id_NRCGI() { set(ignore); type=1;}
-               void select_id_MeNBCoordinationAssistanceInformation() { set(reject); type=2;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(ignore)) { type = 1; return true; }
-                       else if(equal(reject)) { type = 2; return true; }
-                       else { type = 3; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false;
-                       case 3: type = 3; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               NRCGI& select_id_NRCGI() { return set<NRCGI>(1); }
-               NRCGI const* get_id_NRCGI() const { return get<NRCGI>(1); }
-               MeNBCoordinationAssistanceInformation& select_id_MeNBCoordinationAssistanceInformation() { return set<MeNBCoordinationAssistanceInformation>(2); }
-               MeNBCoordinationAssistanceInformation const* get_id_MeNBCoordinationAssistanceInformation() const { return get<MeNBCoordinationAssistanceInformation>(2); }
-               bool is_unknown() const { return type == 3; }
-               void clear()
-               {
-                       switch(type)
-                       {
-                       case 1: var.destroy<NRCGI>(); break;
-                       case 2: var.destroy<MeNBCoordinationAssistanceInformation>(); break;
-                       }
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-                       v.template operator()<NRCGI>(1);
-                       v.template operator()<MeNBCoordinationAssistanceInformation>(2);
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: v(select_id_NRCGI()); return true;
-                       case 2: v(select_id_MeNBCoordinationAssistanceInformation()); return true;
-                       case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       switch(type)
-                       {
-                       case 1: v(var.as<NRCGI>()); return true;
-                       case 2: v(var.as<MeNBCoordinationAssistanceInformation>()); return true;
-                       }
-                       return false;
-
-               }
-               private:
-               template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
-               template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
-               union union_type
-               {
-                       char dummy1[sizeof(MeNBCoordinationAssistanceInformation)];
-                       char dummy2[sizeof(NRCGI)];
-
-               };
-               asn::variant<sizeof(union_type)> var;
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 3; }
-               void clear() {type = 0;}
-               void select_id_NRCGI() { set(optional); type=1;}
-               void select_id_MeNBCoordinationAssistanceInformation() { set(optional); type=2;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(optional)) { type = 1; return true; }
-                       else if(equal(optional)) { type = 2; return true; }
-                       else { type = 3; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 3: type = 3; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-MeNBResourceCoordinationInformation ::= SEQUENCE {
-       eUTRA-Cell-ID                                   ECGI,
-       uLCoordinationInformation               BIT STRING (SIZE(6..4400, ...)),
-       dLCoordinationInformation               BIT STRING (SIZE(6..4400, ...))         OPTIONAL,
-       iE-Extensions                                   ProtocolExtensionContainer { {MeNBResourceCoordinationInformationExtIEs} }               OPTIONAL,
-       ...
-}
-*/
-
-struct MeNBResourceCoordinationInformation : asn::sequence<4, 0, true, 2>
-{
-       static constexpr const char* name() {return "MeNBResourceCoordinationInformation";}
-       using parent_t = asn::sequence<4, 0, true, 2>;
-       struct eUTRA_Cell_ID_t : ECGI
-       {
-               static constexpr const char* name() {return "eUTRA_Cell_ID_t";}
-               using parent_t = ECGI;
-
-       };
-       eUTRA_Cell_ID_t& ref_eUTRA_Cell_ID() {return eUTRA_Cell_ID;}
-       eUTRA_Cell_ID_t const& ref_eUTRA_Cell_ID() const {return eUTRA_Cell_ID;}
-       struct uLCoordinationInformation_t : asn::bstring<>
-       {
-               using constraint_t = asn::constraints<true,asn::span<6, 4400>>;
-               static constexpr const char* name() {return "uLCoordinationInformation_t";}
-               using parent_t = asn::bstring<>;
-
-       };
-
-       uLCoordinationInformation_t& ref_uLCoordinationInformation() {return uLCoordinationInformation;}
-       uLCoordinationInformation_t const& ref_uLCoordinationInformation() const {return uLCoordinationInformation;}
-       struct dLCoordinationInformation_t : asn::bstring<>
-       {
-               using constraint_t = asn::constraints<true,asn::span<6, 4400>>;
-               static constexpr const char* name() {return "dLCoordinationInformation_t";}
-               using parent_t = asn::bstring<>;
-               static constexpr bool optional = true;
-
-       };
-
-       dLCoordinationInformation_t& set_dLCoordinationInformation() { dLCoordinationInformation.setpresent(true); return dLCoordinationInformation;}
-       dLCoordinationInformation_t const* get_dLCoordinationInformation() const {return dLCoordinationInformation.is_valid() ? &dLCoordinationInformation : nullptr;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<MeNBResourceCoordinationInformationExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<MeNBResourceCoordinationInformationExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(eUTRA_Cell_ID);
-               v(uLCoordinationInformation);
-               v(dLCoordinationInformation);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(eUTRA_Cell_ID);
-               v(uLCoordinationInformation);
-               v(dLCoordinationInformation);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               eUTRA_Cell_ID.clear();
-               uLCoordinationInformation.clear();
-               dLCoordinationInformation.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       eUTRA_Cell_ID_t eUTRA_Cell_ID;
-       uLCoordinationInformation_t     uLCoordinationInformation;
-       dLCoordinationInformation_t     dLCoordinationInformation;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-MeNBtoSeNBContainer ::= OCTET STRING
-*/
-
-struct MeNBtoSeNBContainer : asn::ostring<>
-{
-       static constexpr const char* name() {return "MeNBtoSeNBContainer";}
-       using parent_t = asn::ostring<>;
-
-};
-
-/*
-MeNBtoSgNBContainer ::= OCTET STRING
-*/
-
-struct MeNBtoSgNBContainer : asn::ostring<>
-{
-       static constexpr const char* name() {return "MeNBtoSgNBContainer";}
-       using parent_t = asn::ostring<>;
-
-};
-
-/*
-Measurement-ID ::= INTEGER (1..4095, ...)
-*/
-
-struct Measurement_ID : asn::integer<>
-{
-       using constraint_t = asn::constraints<true,asn::span<1, 4095>>;
-       static constexpr const char* name() {return "Measurement-ID";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-MobilityParametersInformation ::= SEQUENCE {
-       handoverTriggerChange                   INTEGER (-20..20),
-       ...
-}
-*/
-
-struct MobilityParametersInformation : asn::sequence<1, 0, true, 0>
-{
-       static constexpr const char* name() {return "MobilityParametersInformation";}
-       using parent_t = asn::sequence<1, 0, true, 0>;
-       struct handoverTriggerChange_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<false,asn::span<-20, 20>>;
-               static constexpr const char* name() {return "handoverTriggerChange_t";}
-               using parent_t = asn::integer<>;
-
-       };
-
-       handoverTriggerChange_t& ref_handoverTriggerChange() {return handoverTriggerChange;}
-       handoverTriggerChange_t const& ref_handoverTriggerChange() const {return handoverTriggerChange;}
-       template<typename V> void decode(V& v)
-       {
-               v(handoverTriggerChange);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(handoverTriggerChange);
-
-       };
-       void clear()
-       {
-               handoverTriggerChange.clear();
-
-       };
-       private:
-       handoverTriggerChange_t handoverTriggerChange;
-
-};
-/*
-MobilityParametersModificationRange ::= SEQUENCE {
-       handoverTriggerChangeLowerLimit         INTEGER (-20..20),
-       handoverTriggerChangeUpperLimit         INTEGER (-20..20),
-       ...
-}
-*/
-
-struct MobilityParametersModificationRange : asn::sequence<2, 0, true, 0>
-{
-       static constexpr const char* name() {return "MobilityParametersModificationRange";}
-       using parent_t = asn::sequence<2, 0, true, 0>;
-       struct handoverTriggerChangeLowerLimit_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<false,asn::span<-20, 20>>;
-               static constexpr const char* name() {return "handoverTriggerChangeLowerLimit_t";}
-               using parent_t = asn::integer<>;
-
-       };
-
-       handoverTriggerChangeLowerLimit_t& ref_handoverTriggerChangeLowerLimit() {return handoverTriggerChangeLowerLimit;}
-       handoverTriggerChangeLowerLimit_t const& ref_handoverTriggerChangeLowerLimit() const {return handoverTriggerChangeLowerLimit;}
-       struct handoverTriggerChangeUpperLimit_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<false,asn::span<-20, 20>>;
-               static constexpr const char* name() {return "handoverTriggerChangeUpperLimit_t";}
-               using parent_t = asn::integer<>;
-
-       };
-
-       handoverTriggerChangeUpperLimit_t& ref_handoverTriggerChangeUpperLimit() {return handoverTriggerChangeUpperLimit;}
-       handoverTriggerChangeUpperLimit_t const& ref_handoverTriggerChangeUpperLimit() const {return handoverTriggerChangeUpperLimit;}
-       template<typename V> void decode(V& v)
-       {
-               v(handoverTriggerChangeLowerLimit);
-               v(handoverTriggerChangeUpperLimit);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(handoverTriggerChangeLowerLimit);
-               v(handoverTriggerChangeUpperLimit);
-
-       };
-       void clear()
-       {
-               handoverTriggerChangeLowerLimit.clear();
-               handoverTriggerChangeUpperLimit.clear();
-
-       };
-       private:
-       handoverTriggerChangeLowerLimit_t       handoverTriggerChangeLowerLimit;
-       handoverTriggerChangeUpperLimit_t       handoverTriggerChangeUpperLimit;
-
-};
-/*
-MultibandInfoList ::= SEQUENCE (SIZE(1..maxnoofBands)) OF BandInfo
-*/
-
-struct MultibandInfoList_elm : BandInfo
-{
-       static constexpr const char* name() {return "MultibandInfoList_elm";}
-       using parent_t = BandInfo;
-
-};
-struct MultibandInfoList : asn::sequenceof<MultibandInfoList_elm>
-{
-       static constexpr const char* name() {return "MultibandInfoList";}
-       using parent_t = asn::sequenceof<MultibandInfoList_elm>;
-       using constraint_t = asn::constraints<false,asn::span<1,  maxnoofBands >>;
-
-};
-/*
-NRSCS ::= ENUMERATED { scs15, scs30, scs60, scs120, ...}
-*/
-
-struct NRSCS : asn::enumerated<4, 0, true>
-{
-       static constexpr const char* name() {return "NRSCS";}
-       using parent_t = asn::enumerated<4, 0, true>;
-       typedef enum {
-               scs15
-               ,scs30
-               ,scs60
-               ,scs120
-       } index_t;
-
-};
-
-/*
-NRNRB ::= ENUMERATED { nrb11, nrb18, nrb24, nrb25, nrb31, nrb32, nrb38, nrb51, nrb52, nrb65, nrb66, nrb78, nrb79, nrb93, nrb106, nrb107, nrb121, nrb132, nrb133, nrb135, nrb160, nrb162, nrb189, nrb216, nrb217, nrb245, nrb264, nrb270, nrb273, ...}
-*/
-
-struct NRNRB : asn::enumerated<29, 0, true>
-{
-       static constexpr const char* name() {return "NRNRB";}
-       using parent_t = asn::enumerated<29, 0, true>;
-       typedef enum {
-               nrb11
-               ,nrb18
-               ,nrb24
-               ,nrb25
-               ,nrb31
-               ,nrb32
-               ,nrb38
-               ,nrb51
-               ,nrb52
-               ,nrb65
-               ,nrb66
-               ,nrb78
-               ,nrb79
-               ,nrb93
-               ,nrb106
-               ,nrb107
-               ,nrb121
-               ,nrb132
-               ,nrb133
-               ,nrb135
-               ,nrb160
-               ,nrb162
-               ,nrb189
-               ,nrb216
-               ,nrb217
-               ,nrb245
-               ,nrb264
-               ,nrb270
-               ,nrb273
-       } index_t;
-
-};
-
-/*
-NR-TxBW-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct NR_TxBW_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-NR-TxBW        ::= SEQUENCE {
-       nRSCS   NRSCS,
-       nRNRB   NRNRB,
-       iE-Extensions                           ProtocolExtensionContainer { {NR-TxBW-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct NR_TxBW : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "NR-TxBW";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct nRSCS_t : NRSCS
-       {
-               static constexpr const char* name() {return "nRSCS_t";}
-               using parent_t = NRSCS;
-
-       };
-       nRSCS_t& ref_nRSCS() {return nRSCS;}
-       nRSCS_t const& ref_nRSCS() const {return nRSCS;}
-       struct nRNRB_t : NRNRB
-       {
-               static constexpr const char* name() {return "nRNRB_t";}
-               using parent_t = NRNRB;
-
-       };
-       nRNRB_t& ref_nRNRB() {return nRNRB;}
-       nRNRB_t const& ref_nRNRB() const {return nRNRB;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<NR_TxBW_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<NR_TxBW_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(nRSCS);
-               v(nRNRB);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(nRSCS);
-               v(nRNRB);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               nRSCS.clear();
-               nRNRB.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       nRSCS_t nRSCS;
-       nRNRB_t nRNRB;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-SULInformation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct SULInformation_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-SULInformation ::= SEQUENCE {
-       sUL-ARFCN                               INTEGER (0.. 3279165),
-       sUL-TxBW                                NR-TxBW,
-       iE-Extensions                   ProtocolExtensionContainer { {SULInformation-ExtIEs} }          OPTIONAL,
-       ...
-}
-*/
-
-struct SULInformation : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "SULInformation";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct sUL_ARFCN_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<false,asn::span<0, 3279165>>;
-               static constexpr const char* name() {return "sUL_ARFCN_t";}
-               using parent_t = asn::integer<>;
-
-       };
-
-       sUL_ARFCN_t& ref_sUL_ARFCN() {return sUL_ARFCN;}
-       sUL_ARFCN_t const& ref_sUL_ARFCN() const {return sUL_ARFCN;}
-       struct sUL_TxBW_t : NR_TxBW
-       {
-               static constexpr const char* name() {return "sUL_TxBW_t";}
-               using parent_t = NR_TxBW;
-
-       };
-       sUL_TxBW_t& ref_sUL_TxBW() {return sUL_TxBW;}
-       sUL_TxBW_t const& ref_sUL_TxBW() const {return sUL_TxBW;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<SULInformation_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<SULInformation_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(sUL_ARFCN);
-               v(sUL_TxBW);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(sUL_ARFCN);
-               v(sUL_TxBW);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               sUL_ARFCN.clear();
-               sUL_TxBW.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       sUL_ARFCN_t     sUL_ARFCN;
-       sUL_TxBW_t      sUL_TxBW;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-NRFreqInfo-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct NRFreqInfo_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-NRFreqInfo ::= SEQUENCE{
-       nRARFCN                 INTEGER (0.. 3279165),
-       freqBandListNr  SEQUENCE (SIZE(1..maxnoofNrCellBands)) OF FreqBandNrItem,
-       sULInformation  SULInformation          OPTIONAL,
-       iE-Extensions   ProtocolExtensionContainer { {NRFreqInfo-ExtIEs} } OPTIONAL,
-
-       ...
-}
-*/
-
-struct NRFreqInfo : asn::sequence<4, 0, true, 2>
-{
-       static constexpr const char* name() {return "NRFreqInfo";}
-       using parent_t = asn::sequence<4, 0, true, 2>;
-       struct nRARFCN_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<false,asn::span<0, 3279165>>;
-               static constexpr const char* name() {return "nRARFCN_t";}
-               using parent_t = asn::integer<>;
-
-       };
-
-       nRARFCN_t& ref_nRARFCN() {return nRARFCN;}
-       nRARFCN_t const& ref_nRARFCN() const {return nRARFCN;}
-       struct freqBandListNr_t_elm : FreqBandNrItem
-       {
-               static constexpr const char* name() {return "freqBandListNr_t_elm";}
-               using parent_t = FreqBandNrItem;
-
-       };
-       struct freqBandListNr_t : asn::sequenceof<freqBandListNr_t_elm>
-       {
-               static constexpr const char* name() {return "freqBandListNr_t";}
-               using parent_t = asn::sequenceof<freqBandListNr_t_elm>;
-               using constraint_t = asn::constraints<false,asn::span<1,  maxnoofNrCellBands >>;
-
-       };
-       freqBandListNr_t& ref_freqBandListNr() {return freqBandListNr;}
-       freqBandListNr_t const& ref_freqBandListNr() const {return freqBandListNr;}
-       struct sULInformation_t : SULInformation
-       {
-               static constexpr const char* name() {return "sULInformation_t";}
-               using parent_t = SULInformation;
-               static constexpr bool optional = true;
-
-       };
-       sULInformation_t& set_sULInformation() { sULInformation.setpresent(true); return sULInformation;}
-       sULInformation_t const* get_sULInformation() const {return sULInformation.is_valid() ? &sULInformation : nullptr;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<NRFreqInfo_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<NRFreqInfo_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(nRARFCN);
-               v(freqBandListNr);
-               v(sULInformation);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(nRARFCN);
-               v(freqBandListNr);
-               v(sULInformation);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               nRARFCN.clear();
-               freqBandListNr.clear();
-               sULInformation.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       nRARFCN_t       nRARFCN;
-       freqBandListNr_t        freqBandListNr;
-       sULInformation_t        sULInformation;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-NRPCI ::= INTEGER (0..1007)
-*/
-
-struct NRPCI : asn::integer<>
-{
-       using constraint_t = asn::constraints<false,asn::span<0, 1007>>;
-       static constexpr const char* name() {return "NRPCI";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-NRencryptionAlgorithms ::= BIT STRING (SIZE (16,...))
-*/
-
-struct NRencryptionAlgorithms : asn::bstring<>
-{
-       using constraint_t = asn::constraints<true,asn::one<16>>;
-       static constexpr const char* name() {return "NRencryptionAlgorithms";}
-       using parent_t = asn::bstring<>;
-
-};
-
-/*
-NRintegrityProtectionAlgorithms ::= BIT STRING (SIZE (16,...))
-*/
-
-struct NRintegrityProtectionAlgorithms : asn::bstring<>
-{
-       using constraint_t = asn::constraints<true,asn::one<16>>;
-       static constexpr const char* name() {return "NRintegrityProtectionAlgorithms";}
-       using parent_t = asn::bstring<>;
-
-};
-
-/*
-NRUESecurityCapabilities-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct NRUESecurityCapabilities_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-NRUESecurityCapabilities ::= SEQUENCE {
-       nRencryptionAlgorithms                          NRencryptionAlgorithms,
-       nRintegrityProtectionAlgorithms         NRintegrityProtectionAlgorithms,
-       iE-Extensions                                           ProtocolExtensionContainer { {NRUESecurityCapabilities-ExtIEs} }        OPTIONAL,
-...
-}
-*/
-
-struct NRUESecurityCapabilities : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "NRUESecurityCapabilities";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct nRencryptionAlgorithms_t : NRencryptionAlgorithms
-       {
-               static constexpr const char* name() {return "nRencryptionAlgorithms_t";}
-               using parent_t = NRencryptionAlgorithms;
-
-       };
-       nRencryptionAlgorithms_t& ref_nRencryptionAlgorithms() {return nRencryptionAlgorithms;}
-       nRencryptionAlgorithms_t const& ref_nRencryptionAlgorithms() const {return nRencryptionAlgorithms;}
-       struct nRintegrityProtectionAlgorithms_t : NRintegrityProtectionAlgorithms
-       {
-               static constexpr const char* name() {return "nRintegrityProtectionAlgorithms_t";}
-               using parent_t = NRintegrityProtectionAlgorithms;
-
-       };
-       nRintegrityProtectionAlgorithms_t& ref_nRintegrityProtectionAlgorithms() {return nRintegrityProtectionAlgorithms;}
-       nRintegrityProtectionAlgorithms_t const& ref_nRintegrityProtectionAlgorithms() const {return nRintegrityProtectionAlgorithms;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<NRUESecurityCapabilities_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<NRUESecurityCapabilities_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(nRencryptionAlgorithms);
-               v(nRintegrityProtectionAlgorithms);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(nRencryptionAlgorithms);
-               v(nRintegrityProtectionAlgorithms);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               nRencryptionAlgorithms.clear();
-               nRintegrityProtectionAlgorithms.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       nRencryptionAlgorithms_t        nRencryptionAlgorithms;
-       nRintegrityProtectionAlgorithms_t       nRintegrityProtectionAlgorithms;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-PCI ::= INTEGER (0..503, ...)
-*/
-
-struct PCI : asn::integer<>
-{
-       using constraint_t = asn::constraints<true,asn::span<0, 503>>;
-       static constexpr const char* name() {return "PCI";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-Neighbour-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       { ID id-NeighbourTAC            CRITICALITY ignore      EXTENSION TAC                           PRESENCE optional}|
-       { ID id-eARFCNExtension         CRITICALITY reject      EXTENSION EARFCNExtension       PRESENCE optional},
-       ...
-}
-*/
-
-struct Neighbour_Information_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 3; }
-               void clear() {type = 0;}
-               void select_id_NeighbourTAC() { set(id_NeighbourTAC); type=1;}
-               void select_id_eARFCNExtension() { set(id_eARFCNExtension); type=2;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(id_NeighbourTAC)) { type = 1; return true; }
-                       else if(equal(id_eARFCNExtension)) { type = 2; return true; }
-                       else { type = 3; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(id_NeighbourTAC);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(id_eARFCNExtension);} return false;
-                       case 3: type = 3; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 3; }
-               void clear() {type = 0;}
-               void select_id_NeighbourTAC() { set(ignore); type=1;}
-               void select_id_eARFCNExtension() { set(reject); type=2;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(ignore)) { type = 1; return true; }
-                       else if(equal(reject)) { type = 2; return true; }
-                       else { type = 3; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false;
-                       case 3: type = 3; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               TAC& select_id_NeighbourTAC() { return set<TAC>(1); }
-               TAC const* get_id_NeighbourTAC() const { return get<TAC>(1); }
-               EARFCNExtension& select_id_eARFCNExtension() { return set<EARFCNExtension>(2); }
-               EARFCNExtension const* get_id_eARFCNExtension() const { return get<EARFCNExtension>(2); }
-               bool is_unknown() const { return type == 3; }
-               void clear()
-               {
-                       switch(type)
-                       {
-                       case 1: var.destroy<TAC>(); break;
-                       case 2: var.destroy<EARFCNExtension>(); break;
-                       }
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-                       v.template operator()<TAC>(1);
-                       v.template operator()<EARFCNExtension>(2);
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: v(select_id_NeighbourTAC()); return true;
-                       case 2: v(select_id_eARFCNExtension()); return true;
-                       case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       switch(type)
-                       {
-                       case 1: v(var.as<TAC>()); return true;
-                       case 2: v(var.as<EARFCNExtension>()); return true;
-                       }
-                       return false;
-
-               }
-               private:
-               template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
-               template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
-               union union_type
-               {
-                       char dummy1[sizeof(EARFCNExtension)];
-                       char dummy2[sizeof(TAC)];
-
-               };
-               asn::variant<sizeof(union_type)> var;
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 3; }
-               void clear() {type = 0;}
-               void select_id_NeighbourTAC() { set(optional); type=1;}
-               void select_id_eARFCNExtension() { set(optional); type=2;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(optional)) { type = 1; return true; }
-                       else if(equal(optional)) { type = 2; return true; }
-                       else { type = 3; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 3: type = 3; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-Neighbour-Information ::= SEQUENCE (SIZE (0..maxnoofNeighbours)) OF SEQUENCE {
-       eCGI                                            ECGI,
-       pCI                                                     PCI,
-       eARFCN                                          EARFCN,
-       iE-Extensions                           ProtocolExtensionContainer { {Neighbour-Information-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct Neighbour_Information_elm : asn::sequence<4, 0, true, 1>
-{
-       static constexpr const char* name() {return "Neighbour_Information_elm";}
-       using parent_t = asn::sequence<4, 0, true, 1>;
-       struct eCGI_t : ECGI
-       {
-               static constexpr const char* name() {return "eCGI_t";}
-               using parent_t = ECGI;
-
-       };
-       eCGI_t& ref_eCGI() {return eCGI;}
-       eCGI_t const& ref_eCGI() const {return eCGI;}
-       struct pCI_t : PCI
-       {
-               static constexpr const char* name() {return "pCI_t";}
-               using parent_t = PCI;
-
-       };
-       pCI_t& ref_pCI() {return pCI;}
-       pCI_t const& ref_pCI() const {return pCI;}
-       struct eARFCN_t : EARFCN
-       {
-               static constexpr const char* name() {return "eARFCN_t";}
-               using parent_t = EARFCN;
-
-       };
-       eARFCN_t& ref_eARFCN() {return eARFCN;}
-       eARFCN_t const& ref_eARFCN() const {return eARFCN;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<Neighbour_Information_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<Neighbour_Information_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(eCGI);
-               v(pCI);
-               v(eARFCN);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(eCGI);
-               v(pCI);
-               v(eARFCN);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               eCGI.clear();
-               pCI.clear();
-               eARFCN.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       eCGI_t  eCGI;
-       pCI_t   pCI;
-       eARFCN_t        eARFCN;
-       iE_Extensions_t iE_Extensions;
-
-};
-struct Neighbour_Information : asn::sequenceof<Neighbour_Information_elm>
-{
-       static constexpr const char* name() {return "Neighbour-Information";}
-       using parent_t = asn::sequenceof<Neighbour_Information_elm>;
-       using constraint_t = asn::constraints<false,asn::span<0,  maxnoofNeighbours >>;
-
-};
-/*
-NewDRBIDrequest::= ENUMERATED {true, ...}
-*/
-
-struct NewDRBIDrequest : asn::enumerated<1, 0, true>
-{
-       static constexpr const char* name() {return "NewDRBIDrequest";}
-       using parent_t = asn::enumerated<1, 0, true>;
-       typedef enum {
-               True
-       } index_t;
-
-};
-
-/*
-Number-of-Antennaports ::= ENUMERATED {
-               an1,
-               an2,
-               an4,
-               ...
-}
-*/
-
-struct Number_of_Antennaports : asn::enumerated<3, 0, true>
-{
-       static constexpr const char* name() {return "Number-of-Antennaports";}
-       using parent_t = asn::enumerated<3, 0, true>;
-       typedef enum {
-               an1
-               ,an2
-               ,an4
-       } index_t;
-
-};
-
-/*
-PDCPChangeIndication ::= ENUMERATED {s-KgNB-update-required, pDCP-data-recovery-required,...}
-*/
-
-struct PDCPChangeIndication : asn::enumerated<2, 0, true>
-{
-       static constexpr const char* name() {return "PDCPChangeIndication";}
-       using parent_t = asn::enumerated<2, 0, true>;
-       typedef enum {
-               s_KgNB_update_required
-               ,pDCP_data_recovery_required
-       } index_t;
-
-};
-
-/*
-PDCPSnLength   ::=     ENUMERATED {twelve-bits,eighteen-bits,...}
-*/
-
-struct PDCPSnLength : asn::enumerated<2, 0, true>
-{
-       static constexpr const char* name() {return "PDCPSnLength";}
-       using parent_t = asn::enumerated<2, 0, true>;
-       typedef enum {
-               twelve_bits
-               ,eighteen_bits
-       } index_t;
-
-};
-
-/*
-PRACH-Configuration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct PRACH_Configuration_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-PRACH-Configuration ::= SEQUENCE {
-       rootSequenceIndex                                               INTEGER (0..837),
-       zeroCorrelationIndex                                    INTEGER (0..15),
-       highSpeedFlag                                                   BOOLEAN,
-       prach-FreqOffset                                                INTEGER (0..94),
-       prach-ConfigIndex                                               INTEGER (0..63)         OPTIONAL, -- present for TDD --
-       iE-Extensions                                                   ProtocolExtensionContainer { {PRACH-Configuration-ExtIEs} }     OPTIONAL,
-       ...
-}
-*/
-
-struct PRACH_Configuration : asn::sequence<6, 0, true, 2>
-{
-       static constexpr const char* name() {return "PRACH-Configuration";}
-       using parent_t = asn::sequence<6, 0, true, 2>;
-       struct rootSequenceIndex_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<false,asn::span<0, 837>>;
-               static constexpr const char* name() {return "rootSequenceIndex_t";}
-               using parent_t = asn::integer<>;
-
-       };
-
-       rootSequenceIndex_t& ref_rootSequenceIndex() {return rootSequenceIndex;}
-       rootSequenceIndex_t const& ref_rootSequenceIndex() const {return rootSequenceIndex;}
-       struct zeroCorrelationIndex_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<false,asn::span<0, 15>>;
-               static constexpr const char* name() {return "zeroCorrelationIndex_t";}
-               using parent_t = asn::integer<>;
-
-       };
-
-       zeroCorrelationIndex_t& ref_zeroCorrelationIndex() {return zeroCorrelationIndex;}
-       zeroCorrelationIndex_t const& ref_zeroCorrelationIndex() const {return zeroCorrelationIndex;}
-       struct highSpeedFlag_t : asn::boolean
-       {
-               static constexpr const char* name() {return "highSpeedFlag_t";}
-               using parent_t = asn::boolean;
-
-       };
-       highSpeedFlag_t& ref_highSpeedFlag() {return highSpeedFlag;}
-       highSpeedFlag_t const& ref_highSpeedFlag() const {return highSpeedFlag;}
-       struct prach_FreqOffset_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<false,asn::span<0, 94>>;
-               static constexpr const char* name() {return "prach_FreqOffset_t";}
-               using parent_t = asn::integer<>;
-
-       };
-
-       prach_FreqOffset_t& ref_prach_FreqOffset() {return prach_FreqOffset;}
-       prach_FreqOffset_t const& ref_prach_FreqOffset() const {return prach_FreqOffset;}
-       struct prach_ConfigIndex_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<false,asn::span<0, 63>>;
-               static constexpr const char* name() {return "prach_ConfigIndex_t";}
-               using parent_t = asn::integer<>;
-               static constexpr bool optional = true;
-
-       };
-
-       prach_ConfigIndex_t& set_prach_ConfigIndex() { prach_ConfigIndex.setpresent(true); return prach_ConfigIndex;}
-       prach_ConfigIndex_t const* get_prach_ConfigIndex() const {return prach_ConfigIndex.is_valid() ? &prach_ConfigIndex : nullptr;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<PRACH_Configuration_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<PRACH_Configuration_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(rootSequenceIndex);
-               v(zeroCorrelationIndex);
-               v(highSpeedFlag);
-               v(prach_FreqOffset);
-               v(prach_ConfigIndex);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(rootSequenceIndex);
-               v(zeroCorrelationIndex);
-               v(highSpeedFlag);
-               v(prach_FreqOffset);
-               v(prach_ConfigIndex);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               rootSequenceIndex.clear();
-               zeroCorrelationIndex.clear();
-               highSpeedFlag.clear();
-               prach_FreqOffset.clear();
-               prach_ConfigIndex.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       rootSequenceIndex_t     rootSequenceIndex;
-       zeroCorrelationIndex_t  zeroCorrelationIndex;
-       highSpeedFlag_t highSpeedFlag;
-       prach_FreqOffset_t      prach_FreqOffset;
-       prach_ConfigIndex_t     prach_ConfigIndex;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-PedestrianUE ::= ENUMERATED {
-       authorized,
-       not-authorized,
-       ...
-}
-*/
-
-struct PedestrianUE : asn::enumerated<2, 0, true>
-{
-       static constexpr const char* name() {return "PedestrianUE";}
-       using parent_t = asn::enumerated<2, 0, true>;
-       typedef enum {
-               authorized
-               ,not_authorized
-       } index_t;
-
-};
-
-/*
-Port-Number ::= OCTET STRING (SIZE (2))
-*/
-
-struct Port_Number : asn::ostring<>
-{
-       using constraint_t = asn::constraints<false,asn::one<2>>;
-       static constexpr const char* name() {return "Port-Number";}
-       using parent_t = asn::ostring<>;
-
-};
-
-/*
-ProSeDirectDiscovery ::= ENUMERATED {
-       authorized,
-       not-authorized,
-       ...
-}
-*/
-
-struct ProSeDirectDiscovery : asn::enumerated<2, 0, true>
-{
-       static constexpr const char* name() {return "ProSeDirectDiscovery";}
-       using parent_t = asn::enumerated<2, 0, true>;
-       typedef enum {
-               authorized
-               ,not_authorized
-       } index_t;
-
-};
-
-/*
-ProSeDirectCommunication ::= ENUMERATED {
-       authorized,
-       not-authorized,
-       ...
-}
-*/
-
-struct ProSeDirectCommunication : asn::enumerated<2, 0, true>
-{
-       static constexpr const char* name() {return "ProSeDirectCommunication";}
-       using parent_t = asn::enumerated<2, 0, true>;
-       typedef enum {
-               authorized
-               ,not_authorized
-       } index_t;
-
-};
-
-/*
-ProSeUEtoNetworkRelaying ::= ENUMERATED {
-       authorized,
-       not-authorized,
-       ...
-}
-*/
-
-struct ProSeUEtoNetworkRelaying : asn::enumerated<2, 0, true>
-{
-       static constexpr const char* name() {return "ProSeUEtoNetworkRelaying";}
-       using parent_t = asn::enumerated<2, 0, true>;
-       typedef enum {
-               authorized
-               ,not_authorized
-       } index_t;
-
-};
-
-/*
-ProSeAuthorized-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       { ID id-ProSeUEtoNetworkRelaying        CRITICALITY ignore      EXTENSION ProSeUEtoNetworkRelaying              PRESENCE optional},
-       ...
-}
-*/
-
-struct ProSeAuthorized_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 2; }
-               void clear() {type = 0;}
-               void select_id_ProSeUEtoNetworkRelaying() { set(id_ProSeUEtoNetworkRelaying); type=1;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(id_ProSeUEtoNetworkRelaying)) { type = 1; return true; }
-                       else { type = 2; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(id_ProSeUEtoNetworkRelaying);} return false;
-                       case 2: type = 2; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 2; }
-               void clear() {type = 0;}
-               void select_id_ProSeUEtoNetworkRelaying() { set(ignore); type=1;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(ignore)) { type = 1; return true; }
-                       else { type = 2; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 2: type = 2; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               ProSeUEtoNetworkRelaying& select_id_ProSeUEtoNetworkRelaying() { return set<ProSeUEtoNetworkRelaying>(1); }
-               ProSeUEtoNetworkRelaying const* get_id_ProSeUEtoNetworkRelaying() const { return get<ProSeUEtoNetworkRelaying>(1); }
-               bool is_unknown() const { return type == 2; }
-               void clear()
-               {
-                       switch(type)
-                       {
-                       case 1: var.destroy<ProSeUEtoNetworkRelaying>(); break;
-                       }
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-                       v.template operator()<ProSeUEtoNetworkRelaying>(1);
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: v(select_id_ProSeUEtoNetworkRelaying()); return true;
-                       case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       switch(type)
-                       {
-                       case 1: v(var.as<ProSeUEtoNetworkRelaying>()); return true;
-                       }
-                       return false;
-
-               }
-               private:
-               template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
-               template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
-               union union_type
-               {
-                       char dummy1[sizeof(ProSeUEtoNetworkRelaying)];
-
-               };
-               asn::variant<sizeof(union_type)> var;
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 2; }
-               void clear() {type = 0;}
-               void select_id_ProSeUEtoNetworkRelaying() { set(optional); type=1;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(optional)) { type = 1; return true; }
-                       else { type = 2; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 2: type = 2; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-ProSeAuthorized ::= SEQUENCE {
-       proSeDirectDiscovery            ProSeDirectDiscovery                    OPTIONAL,
-       proSeDirectCommunication        ProSeDirectCommunication                OPTIONAL,
-       iE-Extensions                           ProtocolExtensionContainer { {ProSeAuthorized-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct ProSeAuthorized : asn::sequence<3, 0, true, 3>
-{
-       static constexpr const char* name() {return "ProSeAuthorized";}
-       using parent_t = asn::sequence<3, 0, true, 3>;
-       struct proSeDirectDiscovery_t : ProSeDirectDiscovery
-       {
-               static constexpr const char* name() {return "proSeDirectDiscovery_t";}
-               using parent_t = ProSeDirectDiscovery;
-               static constexpr bool optional = true;
-
-       };
-       proSeDirectDiscovery_t& set_proSeDirectDiscovery() { proSeDirectDiscovery.setpresent(true); return proSeDirectDiscovery;}
-       proSeDirectDiscovery_t const* get_proSeDirectDiscovery() const {return proSeDirectDiscovery.is_valid() ? &proSeDirectDiscovery : nullptr;}
-       struct proSeDirectCommunication_t : ProSeDirectCommunication
-       {
-               static constexpr const char* name() {return "proSeDirectCommunication_t";}
-               using parent_t = ProSeDirectCommunication;
-               static constexpr bool optional = true;
-
-       };
-       proSeDirectCommunication_t& set_proSeDirectCommunication() { proSeDirectCommunication.setpresent(true); return proSeDirectCommunication;}
-       proSeDirectCommunication_t const* get_proSeDirectCommunication() const {return proSeDirectCommunication.is_valid() ? &proSeDirectCommunication : nullptr;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<ProSeAuthorized_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<ProSeAuthorized_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(proSeDirectDiscovery);
-               v(proSeDirectCommunication);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(proSeDirectDiscovery);
-               v(proSeDirectCommunication);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               proSeDirectDiscovery.clear();
-               proSeDirectCommunication.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       proSeDirectDiscovery_t  proSeDirectDiscovery;
-       proSeDirectCommunication_t      proSeDirectCommunication;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-ResourceType ::= ENUMERATED {
-       downlinknonCRS,
-       cRS,
-       uplink,
-       ...
-}
-*/
-
-struct ResourceType : asn::enumerated<3, 0, true>
-{
-       static constexpr const char* name() {return "ResourceType";}
-       using parent_t = asn::enumerated<3, 0, true>;
-       typedef enum {
-               downlinknonCRS
-               ,cRS
-               ,uplink
-       } index_t;
-
-};
-
-/*
-ProtectedFootprintTimePattern-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct ProtectedFootprintTimePattern_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-ProtectedFootprintTimePattern ::= SEQUENCE {
-       protectedFootprintTimePeriodicity                               INTEGER (1..320, ...),
-       protectedFootprintStartTime                                             INTEGER (1..20, ...),
-       iE-Extensions                                                                   ProtocolExtensionContainer { {ProtectedFootprintTimePattern-ExtIEs} }   OPTIONAL,
-       ...
-}
-*/
-
-struct ProtectedFootprintTimePattern : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "ProtectedFootprintTimePattern";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct protectedFootprintTimePeriodicity_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<true,asn::span<1, 320>>;
-               static constexpr const char* name() {return "protectedFootprintTimePeriodicity_t";}
-               using parent_t = asn::integer<>;
-
-       };
-
-       protectedFootprintTimePeriodicity_t& ref_protectedFootprintTimePeriodicity() {return protectedFootprintTimePeriodicity;}
-       protectedFootprintTimePeriodicity_t const& ref_protectedFootprintTimePeriodicity() const {return protectedFootprintTimePeriodicity;}
-       struct protectedFootprintStartTime_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<true,asn::span<1, 20>>;
-               static constexpr const char* name() {return "protectedFootprintStartTime_t";}
-               using parent_t = asn::integer<>;
-
-       };
-
-       protectedFootprintStartTime_t& ref_protectedFootprintStartTime() {return protectedFootprintStartTime;}
-       protectedFootprintStartTime_t const& ref_protectedFootprintStartTime() const {return protectedFootprintStartTime;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<ProtectedFootprintTimePattern_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<ProtectedFootprintTimePattern_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(protectedFootprintTimePeriodicity);
-               v(protectedFootprintStartTime);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(protectedFootprintTimePeriodicity);
-               v(protectedFootprintStartTime);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               protectedFootprintTimePeriodicity.clear();
-               protectedFootprintStartTime.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       protectedFootprintTimePeriodicity_t     protectedFootprintTimePeriodicity;
-       protectedFootprintStartTime_t   protectedFootprintStartTime;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-ProtectedResourceList-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct ProtectedResourceList_Item_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-ProtectedResourceList-Item ::= SEQUENCE {
-       resourceType                                    ResourceType,
-       intraPRBProtectedResourceFootprint              BIT STRING (SIZE(84, ...)),
-       protectedFootprintFrequencyPattern              BIT STRING (SIZE(6..110, ...)),
-       protectedFootprintTimePattern                   ProtectedFootprintTimePattern,
-       iE-Extensions                                                   ProtocolExtensionContainer { {ProtectedResourceList-Item-ExtIEs} }      OPTIONAL,
-       ...
-}
-*/
-
-struct ProtectedResourceList_Item : asn::sequence<5, 0, true, 1>
-{
-       static constexpr const char* name() {return "ProtectedResourceList-Item";}
-       using parent_t = asn::sequence<5, 0, true, 1>;
-       struct resourceType_t : ResourceType
-       {
-               static constexpr const char* name() {return "resourceType_t";}
-               using parent_t = ResourceType;
-
-       };
-       resourceType_t& ref_resourceType() {return resourceType;}
-       resourceType_t const& ref_resourceType() const {return resourceType;}
-       struct intraPRBProtectedResourceFootprint_t : asn::bstring<>
-       {
-               using constraint_t = asn::constraints<true,asn::one<84>>;
-               static constexpr const char* name() {return "intraPRBProtectedResourceFootprint_t";}
-               using parent_t = asn::bstring<>;
-
-       };
-
-       intraPRBProtectedResourceFootprint_t& ref_intraPRBProtectedResourceFootprint() {return intraPRBProtectedResourceFootprint;}
-       intraPRBProtectedResourceFootprint_t const& ref_intraPRBProtectedResourceFootprint() const {return intraPRBProtectedResourceFootprint;}
-       struct protectedFootprintFrequencyPattern_t : asn::bstring<>
-       {
-               using constraint_t = asn::constraints<true,asn::span<6, 110>>;
-               static constexpr const char* name() {return "protectedFootprintFrequencyPattern_t";}
-               using parent_t = asn::bstring<>;
-
-       };
-
-       protectedFootprintFrequencyPattern_t& ref_protectedFootprintFrequencyPattern() {return protectedFootprintFrequencyPattern;}
-       protectedFootprintFrequencyPattern_t const& ref_protectedFootprintFrequencyPattern() const {return protectedFootprintFrequencyPattern;}
-       struct protectedFootprintTimePattern_t : ProtectedFootprintTimePattern
-       {
-               static constexpr const char* name() {return "protectedFootprintTimePattern_t";}
-               using parent_t = ProtectedFootprintTimePattern;
-
-       };
-       protectedFootprintTimePattern_t& ref_protectedFootprintTimePattern() {return protectedFootprintTimePattern;}
-       protectedFootprintTimePattern_t const& ref_protectedFootprintTimePattern() const {return protectedFootprintTimePattern;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<ProtectedResourceList_Item_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<ProtectedResourceList_Item_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(resourceType);
-               v(intraPRBProtectedResourceFootprint);
-               v(protectedFootprintFrequencyPattern);
-               v(protectedFootprintTimePattern);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(resourceType);
-               v(intraPRBProtectedResourceFootprint);
-               v(protectedFootprintFrequencyPattern);
-               v(protectedFootprintTimePattern);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               resourceType.clear();
-               intraPRBProtectedResourceFootprint.clear();
-               protectedFootprintFrequencyPattern.clear();
-               protectedFootprintTimePattern.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       resourceType_t  resourceType;
-       intraPRBProtectedResourceFootprint_t    intraPRBProtectedResourceFootprint;
-       protectedFootprintFrequencyPattern_t    protectedFootprintFrequencyPattern;
-       protectedFootprintTimePattern_t protectedFootprintTimePattern;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-ProtectedResourceList ::= SEQUENCE (SIZE(1.. maxnoofProtectedResourcePatterns)) OF ProtectedResourceList-Item
-*/
-
-struct ProtectedResourceList_elm : ProtectedResourceList_Item
-{
-       static constexpr const char* name() {return "ProtectedResourceList_elm";}
-       using parent_t = ProtectedResourceList_Item;
-
-};
-struct ProtectedResourceList : asn::sequenceof<ProtectedResourceList_elm>
-{
-       static constexpr const char* name() {return "ProtectedResourceList";}
-       using parent_t = asn::sequenceof<ProtectedResourceList_elm>;
-       using constraint_t = asn::constraints<false,asn::span<1,  maxnoofProtectedResourcePatterns >>;
-
-};
-/*
-ProtectedEUTRAResourceIndication-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-} -- Rapporteur: missing extension --
-*/
-
-struct ProtectedEUTRAResourceIndication_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-ProtectedEUTRAResourceIndication::= SEQUENCE {
-       activationSFN                                                   INTEGER (0..1023),
-       protectedResourceList                                   ProtectedResourceList,
-       mBSFNControlRegionLength                                INTEGER (0..3) OPTIONAL,
-       pDCCHRegionLength                                               INTEGER (1..3) OPTIONAL,
-       iE-Extensions                                                   ProtocolExtensionContainer { {ProtectedEUTRAResourceIndication-ExtIEs} }        OPTIONAL,
-       ...
-}
-*/
-
-struct ProtectedEUTRAResourceIndication : asn::sequence<5, 0, true, 3>
-{
-       static constexpr const char* name() {return "ProtectedEUTRAResourceIndication";}
-       using parent_t = asn::sequence<5, 0, true, 3>;
-       struct activationSFN_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<false,asn::span<0, 1023>>;
-               static constexpr const char* name() {return "activationSFN_t";}
-               using parent_t = asn::integer<>;
-
-       };
-
-       activationSFN_t& ref_activationSFN() {return activationSFN;}
-       activationSFN_t const& ref_activationSFN() const {return activationSFN;}
-       struct protectedResourceList_t : ProtectedResourceList
-       {
-               static constexpr const char* name() {return "protectedResourceList_t";}
-               using parent_t = ProtectedResourceList;
-
-       };
-       protectedResourceList_t& ref_protectedResourceList() {return protectedResourceList;}
-       protectedResourceList_t const& ref_protectedResourceList() const {return protectedResourceList;}
-       struct mBSFNControlRegionLength_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<false,asn::span<0, 3>>;
-               static constexpr const char* name() {return "mBSFNControlRegionLength_t";}
-               using parent_t = asn::integer<>;
-               static constexpr bool optional = true;
-
-       };
-
-       mBSFNControlRegionLength_t& set_mBSFNControlRegionLength() { mBSFNControlRegionLength.setpresent(true); return mBSFNControlRegionLength;}
-       mBSFNControlRegionLength_t const* get_mBSFNControlRegionLength() const {return mBSFNControlRegionLength.is_valid() ? &mBSFNControlRegionLength : nullptr;}
-       struct pDCCHRegionLength_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<false,asn::span<1, 3>>;
-               static constexpr const char* name() {return "pDCCHRegionLength_t";}
-               using parent_t = asn::integer<>;
-               static constexpr bool optional = true;
-
-       };
-
-       pDCCHRegionLength_t& set_pDCCHRegionLength() { pDCCHRegionLength.setpresent(true); return pDCCHRegionLength;}
-       pDCCHRegionLength_t const* get_pDCCHRegionLength() const {return pDCCHRegionLength.is_valid() ? &pDCCHRegionLength : nullptr;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<ProtectedEUTRAResourceIndication_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<ProtectedEUTRAResourceIndication_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(activationSFN);
-               v(protectedResourceList);
-               v(mBSFNControlRegionLength);
-               v(pDCCHRegionLength);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(activationSFN);
-               v(protectedResourceList);
-               v(mBSFNControlRegionLength);
-               v(pDCCHRegionLength);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               activationSFN.clear();
-               protectedResourceList.clear();
-               mBSFNControlRegionLength.clear();
-               pDCCHRegionLength.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       activationSFN_t activationSFN;
-       protectedResourceList_t protectedResourceList;
-       mBSFNControlRegionLength_t      mBSFNControlRegionLength;
-       pDCCHRegionLength_t     pDCCHRegionLength;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-Reestablishment-Indication ::= ENUMERATED {
-       reestablished,
-       ...
-}
-*/
-
-struct Reestablishment_Indication : asn::enumerated<1, 0, true>
-{
-       static constexpr const char* name() {return "Reestablishment-Indication";}
-       using parent_t = asn::enumerated<1, 0, true>;
-       typedef enum {
-               reestablished
-       } index_t;
-
-};
-
-/*
-RLC-Status-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct RLC_Status_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-RLC-Status ::= SEQUENCE {
-       reestablishment-Indication      Reestablishment-Indication,
-       iE-Extensions                           ProtocolExtensionContainer { {RLC-Status-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct RLC_Status : asn::sequence<2, 0, true, 1>
-{
-       static constexpr const char* name() {return "RLC-Status";}
-       using parent_t = asn::sequence<2, 0, true, 1>;
-       struct reestablishment_Indication_t : Reestablishment_Indication
-       {
-               static constexpr const char* name() {return "reestablishment_Indication_t";}
-               using parent_t = Reestablishment_Indication;
-
-       };
-       reestablishment_Indication_t& ref_reestablishment_Indication() {return reestablishment_Indication;}
-       reestablishment_Indication_t const& ref_reestablishment_Indication() const {return reestablishment_Indication;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<RLC_Status_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<RLC_Status_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(reestablishment_Indication);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(reestablishment_Indication);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               reestablishment_Indication.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       reestablishment_Indication_t    reestablishment_Indication;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-RLCMode ::= ENUMERATED {
-       rlc-am,
-       rlc-um-bidirectional,
-       rlc-um-unidirectional-ul,
-       rlc-um-unidirectional-dl,
-       ...
-}
-*/
-
-struct RLCMode : asn::enumerated<4, 0, true>
-{
-       static constexpr const char* name() {return "RLCMode";}
-       using parent_t = asn::enumerated<4, 0, true>;
-       typedef enum {
-               rlc_am
-               ,rlc_um_bidirectional
-               ,rlc_um_unidirectional_ul
-               ,rlc_um_unidirectional_dl
-       } index_t;
-
-};
-
-/*
-RRC-Config-Ind ::= ENUMERATED {
-       full-config,
-       delta-config,
-       ...
-}
-*/
-
-struct RRC_Config_Ind : asn::enumerated<2, 0, true>
-{
-       static constexpr const char* name() {return "RRC-Config-Ind";}
-       using parent_t = asn::enumerated<2, 0, true>;
-       typedef enum {
-               full_config
-               ,delta_config
-       } index_t;
-
-};
-
-/*
-RRC-Context ::= OCTET STRING
-*/
-
-struct RRC_Context : asn::ostring<>
-{
-       static constexpr const char* name() {return "RRC-Context";}
-       using parent_t = asn::ostring<>;
-
-};
-
-/*
-RRCConnReestabIndicator ::= ENUMERATED {
-       reconfigurationFailure, handoverFailure, otherFailure, ...
-}
-*/
-
-struct RRCConnReestabIndicator : asn::enumerated<3, 0, true>
-{
-       static constexpr const char* name() {return "RRCConnReestabIndicator";}
-       using parent_t = asn::enumerated<3, 0, true>;
-       typedef enum {
-               reconfigurationFailure
-               ,handoverFailure
-               ,otherFailure
-       } index_t;
-
-};
-
-/*
-RRCConnSetupIndicator::= ENUMERATED {
-       rrcConnSetup,
-       ...
-}
-*/
-
-struct RRCConnSetupIndicator : asn::enumerated<1, 0, true>
-{
-       static constexpr const char* name() {return "RRCConnSetupIndicator";}
-       using parent_t = asn::enumerated<1, 0, true>;
-       typedef enum {
-               rrcConnSetup
-       } index_t;
-
-};
-
-/*
-RRCContainer ::= OCTET STRING
-*/
-
-struct RRCContainer : asn::ostring<>
-{
-       static constexpr const char* name() {return "RRCContainer";}
-       using parent_t = asn::ostring<>;
-
-};
-
-/*
-RSRPMeasurementResult-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct RSRPMeasurementResult_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-RSRPMeasurementResult ::= SEQUENCE (SIZE(1..maxCellReport)) OF
-       SEQUENCE {
-               rSRPCellID                                              ECGI,
-               rSRPMeasured                                    INTEGER (0..97, ...),
-               iE-Extensions                                   ProtocolExtensionContainer { {RSRPMeasurementResult-ExtIEs} } OPTIONAL,
-               ...
-       }
-*/
-
-struct RSRPMeasurementResult_elm : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "RSRPMeasurementResult_elm";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct rSRPCellID_t : ECGI
-       {
-               static constexpr const char* name() {return "rSRPCellID_t";}
-               using parent_t = ECGI;
-
-       };
-       rSRPCellID_t& ref_rSRPCellID() {return rSRPCellID;}
-       rSRPCellID_t const& ref_rSRPCellID() const {return rSRPCellID;}
-       struct rSRPMeasured_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<true,asn::span<0, 97>>;
-               static constexpr const char* name() {return "rSRPMeasured_t";}
-               using parent_t = asn::integer<>;
-
-       };
-
-       rSRPMeasured_t& ref_rSRPMeasured() {return rSRPMeasured;}
-       rSRPMeasured_t const& ref_rSRPMeasured() const {return rSRPMeasured;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<RSRPMeasurementResult_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<RSRPMeasurementResult_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(rSRPCellID);
-               v(rSRPMeasured);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(rSRPCellID);
-               v(rSRPMeasured);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               rSRPCellID.clear();
-               rSRPMeasured.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       rSRPCellID_t    rSRPCellID;
-       rSRPMeasured_t  rSRPMeasured;
-       iE_Extensions_t iE_Extensions;
-
-};
-struct RSRPMeasurementResult : asn::sequenceof<RSRPMeasurementResult_elm>
-{
-       static constexpr const char* name() {return "RSRPMeasurementResult";}
-       using parent_t = asn::sequenceof<RSRPMeasurementResult_elm>;
-       using constraint_t = asn::constraints<false,asn::span<1,  maxCellReport >>;
-
-};
-/*
-RSRPMRList-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       { ID id-UEID    CRITICALITY ignore      EXTENSION UEID          PRESENCE optional},
-       ...
-}
-*/
-
-struct RSRPMRList_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 2; }
-               void clear() {type = 0;}
-               void select_id_UEID() { set(id_UEID); type=1;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(id_UEID)) { type = 1; return true; }
-                       else { type = 2; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(id_UEID);} return false;
-                       case 2: type = 2; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 2; }
-               void clear() {type = 0;}
-               void select_id_UEID() { set(ignore); type=1;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(ignore)) { type = 1; return true; }
-                       else { type = 2; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 2: type = 2; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               UEID& select_id_UEID() { return set<UEID>(1); }
-               UEID const* get_id_UEID() const { return get<UEID>(1); }
-               bool is_unknown() const { return type == 2; }
-               void clear()
-               {
-                       switch(type)
-                       {
-                       case 1: var.destroy<UEID>(); break;
-                       }
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-                       v.template operator()<UEID>(1);
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: v(select_id_UEID()); return true;
-                       case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       switch(type)
-                       {
-                       case 1: v(var.as<UEID>()); return true;
-                       }
-                       return false;
-
-               }
-               private:
-               template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
-               template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
-               union union_type
-               {
-                       char dummy1[sizeof(UEID)];
-
-               };
-               asn::variant<sizeof(union_type)> var;
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 2; }
-               void clear() {type = 0;}
-               void select_id_UEID() { set(optional); type=1;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(optional)) { type = 1; return true; }
-                       else { type = 2; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 2: type = 2; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-RSRPMRList ::= SEQUENCE (SIZE(1..maxUEReport)) OF
-       SEQUENCE {
-               rSRPMeasurementResult                   RSRPMeasurementResult,
-               iE-Extensions                                   ProtocolExtensionContainer { {RSRPMRList-ExtIEs} } OPTIONAL,
-               ...
-       }
-*/
-
-struct RSRPMRList_elm : asn::sequence<2, 0, true, 1>
-{
-       static constexpr const char* name() {return "RSRPMRList_elm";}
-       using parent_t = asn::sequence<2, 0, true, 1>;
-       struct rSRPMeasurementResult_t : RSRPMeasurementResult
-       {
-               static constexpr const char* name() {return "rSRPMeasurementResult_t";}
-               using parent_t = RSRPMeasurementResult;
-
-       };
-       rSRPMeasurementResult_t& ref_rSRPMeasurementResult() {return rSRPMeasurementResult;}
-       rSRPMeasurementResult_t const& ref_rSRPMeasurementResult() const {return rSRPMeasurementResult;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<RSRPMRList_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<RSRPMRList_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(rSRPMeasurementResult);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(rSRPMeasurementResult);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               rSRPMeasurementResult.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       rSRPMeasurementResult_t rSRPMeasurementResult;
-       iE_Extensions_t iE_Extensions;
-
-};
-struct RSRPMRList : asn::sequenceof<RSRPMRList_elm>
-{
-       static constexpr const char* name() {return "RSRPMRList";}
-       using parent_t = asn::sequenceof<RSRPMRList_elm>;
-       using constraint_t = asn::constraints<false,asn::span<1,  maxUEReport >>;
-
-};
-/*
-UL-GBR-PRB-usage::= INTEGER (0..100)
-*/
-
-struct UL_GBR_PRB_usage : asn::integer<>
-{
-       using constraint_t = asn::constraints<false,asn::span<0, 100>>;
-       static constexpr const char* name() {return "UL-GBR-PRB-usage";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-UL-non-GBR-PRB-usage::= INTEGER (0..100)
-*/
-
-struct UL_non_GBR_PRB_usage : asn::integer<>
-{
-       using constraint_t = asn::constraints<false,asn::span<0, 100>>;
-       static constexpr const char* name() {return "UL-non-GBR-PRB-usage";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-UL-Total-PRB-usage::= INTEGER (0..100)
-*/
-
-struct UL_Total_PRB_usage : asn::integer<>
-{
-       using constraint_t = asn::constraints<false,asn::span<0, 100>>;
-       static constexpr const char* name() {return "UL-Total-PRB-usage";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-UL-scheduling-PDCCH-CCE-usage::= INTEGER (0..100)
-*/
-
-struct UL_scheduling_PDCCH_CCE_usage : asn::integer<>
-{
-       using constraint_t = asn::constraints<false,asn::span<0, 100>>;
-       static constexpr const char* name() {return "UL-scheduling-PDCCH-CCE-usage";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-RadioResourceStatus-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       {ID id-DL-scheduling-PDCCH-CCE-usage            CRITICALITY ignore      EXTENSION DL-scheduling-PDCCH-CCE-usage         PRESENCE optional}|
-
-       {ID id-UL-scheduling-PDCCH-CCE-usage            CRITICALITY ignore      EXTENSION UL-scheduling-PDCCH-CCE-usage         PRESENCE optional},
-       ...
-}
-*/
-
-struct RadioResourceStatus_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 3; }
-               void clear() {type = 0;}
-               void select_id_DL_scheduling_PDCCH_CCE_usage() { set(id_DL_scheduling_PDCCH_CCE_usage); type=1;}
-               void select_id_UL_scheduling_PDCCH_CCE_usage() { set(id_UL_scheduling_PDCCH_CCE_usage); type=2;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(id_DL_scheduling_PDCCH_CCE_usage)) { type = 1; return true; }
-                       else if(equal(id_UL_scheduling_PDCCH_CCE_usage)) { type = 2; return true; }
-                       else { type = 3; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(id_DL_scheduling_PDCCH_CCE_usage);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(id_UL_scheduling_PDCCH_CCE_usage);} return false;
-                       case 3: type = 3; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 3; }
-               void clear() {type = 0;}
-               void select_id_DL_scheduling_PDCCH_CCE_usage() { set(ignore); type=1;}
-               void select_id_UL_scheduling_PDCCH_CCE_usage() { set(ignore); type=2;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(ignore)) { type = 1; return true; }
-                       else if(equal(ignore)) { type = 2; return true; }
-                       else { type = 3; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 3: type = 3; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               DL_scheduling_PDCCH_CCE_usage& select_id_DL_scheduling_PDCCH_CCE_usage() { return set<DL_scheduling_PDCCH_CCE_usage>(1); }
-               DL_scheduling_PDCCH_CCE_usage const* get_id_DL_scheduling_PDCCH_CCE_usage() const { return get<DL_scheduling_PDCCH_CCE_usage>(1); }
-               UL_scheduling_PDCCH_CCE_usage& select_id_UL_scheduling_PDCCH_CCE_usage() { return set<UL_scheduling_PDCCH_CCE_usage>(2); }
-               UL_scheduling_PDCCH_CCE_usage const* get_id_UL_scheduling_PDCCH_CCE_usage() const { return get<UL_scheduling_PDCCH_CCE_usage>(2); }
-               bool is_unknown() const { return type == 3; }
-               void clear()
-               {
-                       switch(type)
-                       {
-                       case 1: var.destroy<DL_scheduling_PDCCH_CCE_usage>(); break;
-                       case 2: var.destroy<UL_scheduling_PDCCH_CCE_usage>(); break;
-                       }
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-                       v.template operator()<DL_scheduling_PDCCH_CCE_usage>(1);
-                       v.template operator()<UL_scheduling_PDCCH_CCE_usage>(2);
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: v(select_id_DL_scheduling_PDCCH_CCE_usage()); return true;
-                       case 2: v(select_id_UL_scheduling_PDCCH_CCE_usage()); return true;
-                       case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       switch(type)
-                       {
-                       case 1: v(var.as<DL_scheduling_PDCCH_CCE_usage>()); return true;
-                       case 2: v(var.as<UL_scheduling_PDCCH_CCE_usage>()); return true;
-                       }
-                       return false;
-
-               }
-               private:
-               template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
-               template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
-               union union_type
-               {
-                       char dummy1[sizeof(DL_scheduling_PDCCH_CCE_usage)];
-                       char dummy2[sizeof(UL_scheduling_PDCCH_CCE_usage)];
-
-               };
-               asn::variant<sizeof(union_type)> var;
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 3; }
-               void clear() {type = 0;}
-               void select_id_DL_scheduling_PDCCH_CCE_usage() { set(optional); type=1;}
-               void select_id_UL_scheduling_PDCCH_CCE_usage() { set(optional); type=2;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(optional)) { type = 1; return true; }
-                       else if(equal(optional)) { type = 2; return true; }
-                       else { type = 3; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 3: type = 3; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-RadioResourceStatus    ::= SEQUENCE {
-       dL-GBR-PRB-usage                                                        DL-GBR-PRB-usage,
-       uL-GBR-PRB-usage                                                        UL-GBR-PRB-usage,
-       dL-non-GBR-PRB-usage                                            DL-non-GBR-PRB-usage,
-       uL-non-GBR-PRB-usage                                            UL-non-GBR-PRB-usage,
-       dL-Total-PRB-usage                                                      DL-Total-PRB-usage,
-       uL-Total-PRB-usage                                                      UL-Total-PRB-usage,
-       iE-Extensions                                                           ProtocolExtensionContainer { {RadioResourceStatus-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct RadioResourceStatus : asn::sequence<7, 0, true, 1>
-{
-       static constexpr const char* name() {return "RadioResourceStatus";}
-       using parent_t = asn::sequence<7, 0, true, 1>;
-       struct dL_GBR_PRB_usage_t : DL_GBR_PRB_usage
-       {
-               static constexpr const char* name() {return "dL_GBR_PRB_usage_t";}
-               using parent_t = DL_GBR_PRB_usage;
-
-       };
-       dL_GBR_PRB_usage_t& ref_dL_GBR_PRB_usage() {return dL_GBR_PRB_usage;}
-       dL_GBR_PRB_usage_t const& ref_dL_GBR_PRB_usage() const {return dL_GBR_PRB_usage;}
-       struct uL_GBR_PRB_usage_t : UL_GBR_PRB_usage
-       {
-               static constexpr const char* name() {return "uL_GBR_PRB_usage_t";}
-               using parent_t = UL_GBR_PRB_usage;
-
-       };
-       uL_GBR_PRB_usage_t& ref_uL_GBR_PRB_usage() {return uL_GBR_PRB_usage;}
-       uL_GBR_PRB_usage_t const& ref_uL_GBR_PRB_usage() const {return uL_GBR_PRB_usage;}
-       struct dL_non_GBR_PRB_usage_t : DL_non_GBR_PRB_usage
-       {
-               static constexpr const char* name() {return "dL_non_GBR_PRB_usage_t";}
-               using parent_t = DL_non_GBR_PRB_usage;
-
-       };
-       dL_non_GBR_PRB_usage_t& ref_dL_non_GBR_PRB_usage() {return dL_non_GBR_PRB_usage;}
-       dL_non_GBR_PRB_usage_t const& ref_dL_non_GBR_PRB_usage() const {return dL_non_GBR_PRB_usage;}
-       struct uL_non_GBR_PRB_usage_t : UL_non_GBR_PRB_usage
-       {
-               static constexpr const char* name() {return "uL_non_GBR_PRB_usage_t";}
-               using parent_t = UL_non_GBR_PRB_usage;
-
-       };
-       uL_non_GBR_PRB_usage_t& ref_uL_non_GBR_PRB_usage() {return uL_non_GBR_PRB_usage;}
-       uL_non_GBR_PRB_usage_t const& ref_uL_non_GBR_PRB_usage() const {return uL_non_GBR_PRB_usage;}
-       struct dL_Total_PRB_usage_t : DL_Total_PRB_usage
-       {
-               static constexpr const char* name() {return "dL_Total_PRB_usage_t";}
-               using parent_t = DL_Total_PRB_usage;
-
-       };
-       dL_Total_PRB_usage_t& ref_dL_Total_PRB_usage() {return dL_Total_PRB_usage;}
-       dL_Total_PRB_usage_t const& ref_dL_Total_PRB_usage() const {return dL_Total_PRB_usage;}
-       struct uL_Total_PRB_usage_t : UL_Total_PRB_usage
-       {
-               static constexpr const char* name() {return "uL_Total_PRB_usage_t";}
-               using parent_t = UL_Total_PRB_usage;
-
-       };
-       uL_Total_PRB_usage_t& ref_uL_Total_PRB_usage() {return uL_Total_PRB_usage;}
-       uL_Total_PRB_usage_t const& ref_uL_Total_PRB_usage() const {return uL_Total_PRB_usage;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<RadioResourceStatus_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<RadioResourceStatus_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(dL_GBR_PRB_usage);
-               v(uL_GBR_PRB_usage);
-               v(dL_non_GBR_PRB_usage);
-               v(uL_non_GBR_PRB_usage);
-               v(dL_Total_PRB_usage);
-               v(uL_Total_PRB_usage);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(dL_GBR_PRB_usage);
-               v(uL_GBR_PRB_usage);
-               v(dL_non_GBR_PRB_usage);
-               v(uL_non_GBR_PRB_usage);
-               v(dL_Total_PRB_usage);
-               v(uL_Total_PRB_usage);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               dL_GBR_PRB_usage.clear();
-               uL_GBR_PRB_usage.clear();
-               dL_non_GBR_PRB_usage.clear();
-               uL_non_GBR_PRB_usage.clear();
-               dL_Total_PRB_usage.clear();
-               uL_Total_PRB_usage.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       dL_GBR_PRB_usage_t      dL_GBR_PRB_usage;
-       uL_GBR_PRB_usage_t      uL_GBR_PRB_usage;
-       dL_non_GBR_PRB_usage_t  dL_non_GBR_PRB_usage;
-       uL_non_GBR_PRB_usage_t  uL_non_GBR_PRB_usage;
-       dL_Total_PRB_usage_t    dL_Total_PRB_usage;
-       uL_Total_PRB_usage_t    uL_Total_PRB_usage;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-ReceiveStatusOfULPDCPSDUsExtended ::= BIT STRING (SIZE(1..16384))
-*/
-
-struct ReceiveStatusOfULPDCPSDUsExtended : asn::bstring<>
-{
-       using constraint_t = asn::constraints<false,asn::span<1, 16384>>;
-       static constexpr const char* name() {return "ReceiveStatusOfULPDCPSDUsExtended";}
-       using parent_t = asn::bstring<>;
-
-};
-
-/*
-ReceiveStatusOfULPDCPSDUsPDCP-SNlength18 ::= BIT STRING (SIZE(1..131072))
-*/
-
-struct ReceiveStatusOfULPDCPSDUsPDCP_SNlength18 : asn::bstring<>
-{
-       using constraint_t = asn::constraints<false,asn::span<1, 131072>>;
-       static constexpr const char* name() {return "ReceiveStatusOfULPDCPSDUsPDCP-SNlength18";}
-       using parent_t = asn::bstring<>;
-
-};
-
-/*
-ReceiveStatusofULPDCPSDUs ::= BIT STRING (SIZE(4096))
-*/
-
-struct ReceiveStatusofULPDCPSDUs : asn::bstring<>
-{
-       using constraint_t = asn::constraints<false,asn::one<4096>>;
-       static constexpr const char* name() {return "ReceiveStatusofULPDCPSDUs";}
-       using parent_t = asn::bstring<>;
-
-};
-
-/*
-Registration-Request   ::= ENUMERATED {
-       start,
-       stop,
-       ...,
-       partial-stop,
-       add
-}
-*/
-
-struct Registration_Request : asn::enumerated<4, 2, true>
-{
-       static constexpr const char* name() {return "Registration-Request";}
-       using parent_t = asn::enumerated<4, 2, true>;
-       typedef enum {
-               start
-               ,stop
-               ,partial_stop
-               ,add
-       } index_t;
-
-};
-
-/*
-RelativeNarrowbandTxPower-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       { ID id-enhancedRNTP    CRITICALITY ignore      EXTENSION EnhancedRNTP          PRESENCE optional },
-       ...
-}
-*/
-
-struct RelativeNarrowbandTxPower_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 2; }
-               void clear() {type = 0;}
-               void select_id_enhancedRNTP() { set(id_enhancedRNTP); type=1;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(id_enhancedRNTP)) { type = 1; return true; }
-                       else { type = 2; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(id_enhancedRNTP);} return false;
-                       case 2: type = 2; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 2; }
-               void clear() {type = 0;}
-               void select_id_enhancedRNTP() { set(ignore); type=1;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(ignore)) { type = 1; return true; }
-                       else { type = 2; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 2: type = 2; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               EnhancedRNTP& select_id_enhancedRNTP() { return set<EnhancedRNTP>(1); }
-               EnhancedRNTP const* get_id_enhancedRNTP() const { return get<EnhancedRNTP>(1); }
-               bool is_unknown() const { return type == 2; }
-               void clear()
-               {
-                       switch(type)
-                       {
-                       case 1: var.destroy<EnhancedRNTP>(); break;
-                       }
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-                       v.template operator()<EnhancedRNTP>(1);
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: v(select_id_enhancedRNTP()); return true;
-                       case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       switch(type)
-                       {
-                       case 1: v(var.as<EnhancedRNTP>()); return true;
-                       }
-                       return false;
-
-               }
-               private:
-               template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
-               template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
-               union union_type
-               {
-                       char dummy1[sizeof(EnhancedRNTP)];
-
-               };
-               asn::variant<sizeof(union_type)> var;
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 2; }
-               void clear() {type = 0;}
-               void select_id_enhancedRNTP() { set(optional); type=1;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(optional)) { type = 1; return true; }
-                       else { type = 2; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 2: type = 2; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-RelativeNarrowbandTxPower ::= SEQUENCE {
-
-       rNTP-PerPRB                                                     BIT STRING (SIZE(6..110, ...)),
-       rNTP-Threshold                                          RNTP-Threshold,
-       numberOfCellSpecificAntennaPorts        ENUMERATED {one, two, four, ...},
-       p-B                                                                     INTEGER (0..3,...),
-       pDCCH-InterferenceImpact                        INTEGER (0..4,...),
-       iE-Extensions                                           ProtocolExtensionContainer { {RelativeNarrowbandTxPower-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct RelativeNarrowbandTxPower : asn::sequence<6, 0, true, 1>
-{
-       static constexpr const char* name() {return "RelativeNarrowbandTxPower";}
-       using parent_t = asn::sequence<6, 0, true, 1>;
-       struct rNTP_PerPRB_t : asn::bstring<>
-       {
-               using constraint_t = asn::constraints<true,asn::span<6, 110>>;
-               static constexpr const char* name() {return "rNTP_PerPRB_t";}
-               using parent_t = asn::bstring<>;
-
-       };
-
-       rNTP_PerPRB_t& ref_rNTP_PerPRB() {return rNTP_PerPRB;}
-       rNTP_PerPRB_t const& ref_rNTP_PerPRB() const {return rNTP_PerPRB;}
-       struct rNTP_Threshold_t : RNTP_Threshold
-       {
-               static constexpr const char* name() {return "rNTP_Threshold_t";}
-               using parent_t = RNTP_Threshold;
-
-       };
-       rNTP_Threshold_t& ref_rNTP_Threshold() {return rNTP_Threshold;}
-       rNTP_Threshold_t const& ref_rNTP_Threshold() const {return rNTP_Threshold;}
-       struct numberOfCellSpecificAntennaPorts_t : asn::enumerated<3, 0, true>
-       {
-               static constexpr const char* name() {return "numberOfCellSpecificAntennaPorts_t";}
-               using parent_t = asn::enumerated<3, 0, true>;
-               typedef enum {
-                       one
-                       ,two
-                       ,four
-               } index_t;
-
-       };
-
-       numberOfCellSpecificAntennaPorts_t& ref_numberOfCellSpecificAntennaPorts() {return numberOfCellSpecificAntennaPorts;}
-       numberOfCellSpecificAntennaPorts_t const& ref_numberOfCellSpecificAntennaPorts() const {return numberOfCellSpecificAntennaPorts;}
-       struct p_B_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<true,asn::span<0, 3>>;
-               static constexpr const char* name() {return "p_B_t";}
-               using parent_t = asn::integer<>;
-
-       };
-
-       p_B_t& ref_p_B() {return p_B;}
-       p_B_t const& ref_p_B() const {return p_B;}
-       struct pDCCH_InterferenceImpact_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<true,asn::span<0, 4>>;
-               static constexpr const char* name() {return "pDCCH_InterferenceImpact_t";}
-               using parent_t = asn::integer<>;
-
-       };
-
-       pDCCH_InterferenceImpact_t& ref_pDCCH_InterferenceImpact() {return pDCCH_InterferenceImpact;}
-       pDCCH_InterferenceImpact_t const& ref_pDCCH_InterferenceImpact() const {return pDCCH_InterferenceImpact;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<RelativeNarrowbandTxPower_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<RelativeNarrowbandTxPower_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(rNTP_PerPRB);
-               v(rNTP_Threshold);
-               v(numberOfCellSpecificAntennaPorts);
-               v(p_B);
-               v(pDCCH_InterferenceImpact);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(rNTP_PerPRB);
-               v(rNTP_Threshold);
-               v(numberOfCellSpecificAntennaPorts);
-               v(p_B);
-               v(pDCCH_InterferenceImpact);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               rNTP_PerPRB.clear();
-               rNTP_Threshold.clear();
-               numberOfCellSpecificAntennaPorts.clear();
-               p_B.clear();
-               pDCCH_InterferenceImpact.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       rNTP_PerPRB_t   rNTP_PerPRB;
-       rNTP_Threshold_t        rNTP_Threshold;
-       numberOfCellSpecificAntennaPorts_t      numberOfCellSpecificAntennaPorts;
-       p_B_t   p_B;
-       pDCCH_InterferenceImpact_t      pDCCH_InterferenceImpact;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-ReportCharacteristics  ::= BIT STRING (SIZE (32))
-*/
-
-struct ReportCharacteristics : asn::bstring<>
-{
-       using constraint_t = asn::constraints<false,asn::one<32>>;
-       static constexpr const char* name() {return "ReportCharacteristics";}
-       using parent_t = asn::bstring<>;
-
-};
-
-/*
-ReportingPeriodicityCSIR ::= ENUMERATED {
-       ms5,
-       ms10,
-       ms20,
-       ms40,
-       ms80,
-...
-}
-*/
-
-struct ReportingPeriodicityCSIR : asn::enumerated<5, 0, true>
-{
-       static constexpr const char* name() {return "ReportingPeriodicityCSIR";}
-       using parent_t = asn::enumerated<5, 0, true>;
-       typedef enum {
-               ms5
-               ,ms10
-               ,ms20
-               ,ms40
-               ,ms80
-       } index_t;
-
-};
-
-/*
-ReportingPeriodicityRSRPMR ::= ENUMERATED {
-       one-hundred-20-ms,
-       two-hundred-40-ms,
-       four-hundred-80-ms,
-       six-hundred-40-ms,
-...
-}
-*/
-
-struct ReportingPeriodicityRSRPMR : asn::enumerated<4, 0, true>
-{
-       static constexpr const char* name() {return "ReportingPeriodicityRSRPMR";}
-       using parent_t = asn::enumerated<4, 0, true>;
-       typedef enum {
-               one_hundred_20_ms
-               ,two_hundred_40_ms
-               ,four_hundred_80_ms
-               ,six_hundred_40_ms
-       } index_t;
-
-};
-
-/*
-ResumeID       ::= CHOICE {
-       non-truncated   BIT STRING(SIZE(40)),
-       truncated               BIT STRING(SIZE(24)),
-       ...
-}
-*/
-
-struct ResumeID : asn::choice<2, 0, true>
-{
-       static constexpr const char* name() {return "ResumeID";}
-       using parent_t = asn::choice<2, 0, true>;
-       index_type get_index() const {return index;}
-       bool is_unknown() const {return index == 3;}
-       void set_unknown() { set_index(3);  }
-       ~ResumeID() {clear();}
-       struct non_truncated_t : asn::bstring<>
-       {
-               using constraint_t = asn::constraints<false,asn::one<40>>;
-               static constexpr const char* name() {return "non_truncated_t";}
-               using parent_t = asn::bstring<>;
-
-       };
-
-       struct truncated_t : asn::bstring<>
-       {
-               using constraint_t = asn::constraints<false,asn::one<24>>;
-               static constexpr const char* name() {return "truncated_t";}
-               using parent_t = asn::bstring<>;
-
-       };
-
-       void clear()
-       {
-               switch(get_index())
-               {
-               case 1: var.destroy<non_truncated_t>(); break;
-               case 2: var.destroy<truncated_t>(); break;
-               }
-               index = 0;
-               base::clear();
-       }
-       template<typename V> bool decode(size_t idx, V& v)
-       {
-               clear();
-               switch(idx)
-               {
-               case 1: set_index(1); return v(var.build<non_truncated_t>());
-               case 2: set_index(2); return v(var.build<truncated_t>());
-               }
-               return false;
-
-       }
-       template<typename V> bool encode(V& v) const
-       {
-               switch(get_index())
-               {
-               case 1: return v(var.as<non_truncated_t>());
-               case 2: return v(var.as<truncated_t>());
-               }
-               return false;
-       }
-       template<typename V> static inline void enumerate(V& v)
-       {
-               v.template operator()<non_truncated_t>(1);
-               v.template operator()<truncated_t>(2);
-
-       }
-       non_truncated_t& select_non_truncated() { if(get_index() != 1) { clear(); set_index(1); return var.build<non_truncated_t>();} return var.as<non_truncated_t>();}
-       non_truncated_t const* get_non_truncated() const { if(get_index() == 1) { return &var.as<non_truncated_t>();} return nullptr; }
-       truncated_t& select_truncated() { if(get_index() != 2) { clear(); set_index(2); return var.build<truncated_t>();} return var.as<truncated_t>();}
-       truncated_t const* get_truncated() const { if(get_index() == 2) { return &var.as<truncated_t>();} return nullptr; }
-       private:
-       void set_index(index_type i) {index = i; base::set();}
-       union union_type
-       {
-               char dummy1[sizeof(non_truncated_t)];
-               char dummy2[sizeof(truncated_t)];
-
-       };
-       asn::variant<sizeof(union_type)>        var;
-       index_type      index {0};
-};
-/*
-S1TNLLoadIndicator-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct S1TNLLoadIndicator_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-S1TNLLoadIndicator ::= SEQUENCE {
-       dLS1TNLLoadIndicator                    LoadIndicator,
-       uLS1TNLLoadIndicator                    LoadIndicator,
-       iE-Extensions                                   ProtocolExtensionContainer { {S1TNLLoadIndicator-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct S1TNLLoadIndicator : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "S1TNLLoadIndicator";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct dLS1TNLLoadIndicator_t : LoadIndicator
-       {
-               static constexpr const char* name() {return "dLS1TNLLoadIndicator_t";}
-               using parent_t = LoadIndicator;
-
-       };
-       dLS1TNLLoadIndicator_t& ref_dLS1TNLLoadIndicator() {return dLS1TNLLoadIndicator;}
-       dLS1TNLLoadIndicator_t const& ref_dLS1TNLLoadIndicator() const {return dLS1TNLLoadIndicator;}
-       struct uLS1TNLLoadIndicator_t : LoadIndicator
-       {
-               static constexpr const char* name() {return "uLS1TNLLoadIndicator_t";}
-               using parent_t = LoadIndicator;
-
-       };
-       uLS1TNLLoadIndicator_t& ref_uLS1TNLLoadIndicator() {return uLS1TNLLoadIndicator;}
-       uLS1TNLLoadIndicator_t const& ref_uLS1TNLLoadIndicator() const {return uLS1TNLLoadIndicator;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<S1TNLLoadIndicator_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<S1TNLLoadIndicator_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(dLS1TNLLoadIndicator);
-               v(uLS1TNLLoadIndicator);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(dLS1TNLLoadIndicator);
-               v(uLS1TNLLoadIndicator);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               dLS1TNLLoadIndicator.clear();
-               uLS1TNLLoadIndicator.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       dLS1TNLLoadIndicator_t  dLS1TNLLoadIndicator;
-       uLS1TNLLoadIndicator_t  uLS1TNLLoadIndicator;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-SCGChangeIndication ::= ENUMERATED {pDCPCountWrapAround, pSCellChange, other, ...}
-*/
-
-struct SCGChangeIndication : asn::enumerated<3, 0, true>
-{
-       static constexpr const char* name() {return "SCGChangeIndication";}
-       using parent_t = asn::enumerated<3, 0, true>;
-       typedef enum {
-               pDCPCountWrapAround
-               ,pSCellChange
-               ,other
-       } index_t;
-
-};
-
-/*
-SCGConfigurationQuery ::= ENUMERATED {true,...}
-*/
-
-struct SCGConfigurationQuery : asn::enumerated<1, 0, true>
-{
-       static constexpr const char* name() {return "SCGConfigurationQuery";}
-       using parent_t = asn::enumerated<1, 0, true>;
-       typedef enum {
-               True
-       } index_t;
-
-};
-
-/*
-SGNB-Addition-Trigger-Ind       ::= ENUMERATED {
-       sn-change,
-       inter-eNB-HO,
-       intra-eNB-HO,
-       ...
-}
-*/
-
-struct SGNB_Addition_Trigger_Ind : asn::enumerated<3, 0, true>
-{
-       static constexpr const char* name() {return "SGNB-Addition-Trigger-Ind";}
-       using parent_t = asn::enumerated<3, 0, true>;
-       typedef enum {
-               sn_change
-               ,inter_eNB_HO
-               ,intra_eNB_HO
-       } index_t;
-
-};
-
-/*
-SIPTOBearerDeactivationIndication ::= ENUMERATED {
-       true,
-       ...
-}
-*/
-
-struct SIPTOBearerDeactivationIndication : asn::enumerated<1, 0, true>
-{
-       static constexpr const char* name() {return "SIPTOBearerDeactivationIndication";}
-       using parent_t = asn::enumerated<1, 0, true>;
-       typedef enum {
-               True
-       } index_t;
-
-};
-
-/*
-SRBType ::= ENUMERATED {srb1, srb2, ...}
-*/
-
-struct SRBType : asn::enumerated<2, 0, true>
-{
-       static constexpr const char* name() {return "SRBType";}
-       using parent_t = asn::enumerated<2, 0, true>;
-       typedef enum {
-               srb1
-               ,srb2
-       } index_t;
-
-};
-
-/*
-SRVCCOperationPossible ::= ENUMERATED {
-       possible,
-       ...
-}
-*/
-
-struct SRVCCOperationPossible : asn::enumerated<1, 0, true>
-{
-       static constexpr const char* name() {return "SRVCCOperationPossible";}
-       using parent_t = asn::enumerated<1, 0, true>;
-       typedef enum {
-               possible
-       } index_t;
-
-};
-
-/*
-ScheduledCommunicationTime-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct ScheduledCommunicationTime_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-ScheduledCommunicationTime ::= SEQUENCE {
-       dayofWeek                               BIT STRING (SIZE(7))                                                                    OPTIONAL,
-       timeofDayStart                  INTEGER (0..86399, ...)                                                                 OPTIONAL,
-       timeofDayEnd                            INTEGER (0..86399, ...)                                                                 OPTIONAL,
-       iE-Extensions                   ProtocolExtensionContainer { { ScheduledCommunicationTime-ExtIEs}}      OPTIONAL,
-       ...
-}
-*/
-
-struct ScheduledCommunicationTime : asn::sequence<4, 0, true, 4>
-{
-       static constexpr const char* name() {return "ScheduledCommunicationTime";}
-       using parent_t = asn::sequence<4, 0, true, 4>;
-       struct dayofWeek_t : asn::bstring<>
-       {
-               using constraint_t = asn::constraints<false,asn::one<7>>;
-               static constexpr const char* name() {return "dayofWeek_t";}
-               using parent_t = asn::bstring<>;
-               static constexpr bool optional = true;
-
-       };
-
-       dayofWeek_t& set_dayofWeek() { dayofWeek.setpresent(true); return dayofWeek;}
-       dayofWeek_t const* get_dayofWeek() const {return dayofWeek.is_valid() ? &dayofWeek : nullptr;}
-       struct timeofDayStart_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<true,asn::span<0, 86399>>;
-               static constexpr const char* name() {return "timeofDayStart_t";}
-               using parent_t = asn::integer<>;
-               static constexpr bool optional = true;
-
-       };
-
-       timeofDayStart_t& set_timeofDayStart() { timeofDayStart.setpresent(true); return timeofDayStart;}
-       timeofDayStart_t const* get_timeofDayStart() const {return timeofDayStart.is_valid() ? &timeofDayStart : nullptr;}
-       struct timeofDayEnd_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<true,asn::span<0, 86399>>;
-               static constexpr const char* name() {return "timeofDayEnd_t";}
-               using parent_t = asn::integer<>;
-               static constexpr bool optional = true;
-
-       };
-
-       timeofDayEnd_t& set_timeofDayEnd() { timeofDayEnd.setpresent(true); return timeofDayEnd;}
-       timeofDayEnd_t const* get_timeofDayEnd() const {return timeofDayEnd.is_valid() ? &timeofDayEnd : nullptr;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<ScheduledCommunicationTime_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<ScheduledCommunicationTime_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(dayofWeek);
-               v(timeofDayStart);
-               v(timeofDayEnd);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(dayofWeek);
-               v(timeofDayStart);
-               v(timeofDayEnd);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               dayofWeek.clear();
-               timeofDayStart.clear();
-               timeofDayEnd.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       dayofWeek_t     dayofWeek;
-       timeofDayStart_t        timeofDayStart;
-       timeofDayEnd_t  timeofDayEnd;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-SeNBSecurityKey ::= BIT STRING (SIZE(256))
-*/
-
-struct SeNBSecurityKey : asn::bstring<>
-{
-       using constraint_t = asn::constraints<false,asn::one<256>>;
-       static constexpr const char* name() {return "SeNBSecurityKey";}
-       using parent_t = asn::bstring<>;
-
-};
-
-/*
-SeNBtoMeNBContainer ::= OCTET STRING
-*/
-
-struct SeNBtoMeNBContainer : asn::ostring<>
-{
-       static constexpr const char* name() {return "SeNBtoMeNBContainer";}
-       using parent_t = asn::ostring<>;
-
-};
-
-/*
-SecondaryRATUsageReport-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct SecondaryRATUsageReport_Item_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-SecondaryRATUsageReport-Item ::= SEQUENCE {
-       e-RAB-ID                                                E-RAB-ID,
-       secondaryRATType                                ENUMERATED {nr, ...},
-       e-RABUsageReportList                    E-RABUsageReportList,
-       iE-Extensions                           ProtocolExtensionContainer { {SecondaryRATUsageReport-Item-ExtIEs} } OPTIONAL,
-...
-}
-*/
-
-struct SecondaryRATUsageReport_Item : asn::sequence<4, 0, true, 1>
-{
-       static constexpr const char* name() {return "SecondaryRATUsageReport-Item";}
-       using parent_t = asn::sequence<4, 0, true, 1>;
-       struct e_RAB_ID_t : E_RAB_ID
-       {
-               static constexpr const char* name() {return "e_RAB_ID_t";}
-               using parent_t = E_RAB_ID;
-
-       };
-       e_RAB_ID_t& ref_e_RAB_ID() {return e_RAB_ID;}
-       e_RAB_ID_t const& ref_e_RAB_ID() const {return e_RAB_ID;}
-       struct secondaryRATType_t : asn::enumerated<1, 0, true>
-       {
-               static constexpr const char* name() {return "secondaryRATType_t";}
-               using parent_t = asn::enumerated<1, 0, true>;
-               typedef enum {
-                       nr
-               } index_t;
-
-       };
-
-       secondaryRATType_t& ref_secondaryRATType() {return secondaryRATType;}
-       secondaryRATType_t const& ref_secondaryRATType() const {return secondaryRATType;}
-       struct e_RABUsageReportList_t : E_RABUsageReportList
-       {
-               static constexpr const char* name() {return "e_RABUsageReportList_t";}
-               using parent_t = E_RABUsageReportList;
-
-       };
-       e_RABUsageReportList_t& ref_e_RABUsageReportList() {return e_RABUsageReportList;}
-       e_RABUsageReportList_t const& ref_e_RABUsageReportList() const {return e_RABUsageReportList;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<SecondaryRATUsageReport_Item_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<SecondaryRATUsageReport_Item_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(e_RAB_ID);
-               v(secondaryRATType);
-               v(e_RABUsageReportList);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(e_RAB_ID);
-               v(secondaryRATType);
-               v(e_RABUsageReportList);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               e_RAB_ID.clear();
-               secondaryRATType.clear();
-               e_RABUsageReportList.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       e_RAB_ID_t      e_RAB_ID;
-       secondaryRATType_t      secondaryRATType;
-       e_RABUsageReportList_t  e_RABUsageReportList;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-SecondaryRATUsageReport-ItemIEs        X2AP-PROTOCOL-IES ::= {
-       { ID id-SecondaryRATUsageReport-Item            CRITICALITY reject      TYPE SecondaryRATUsageReport-Item               PRESENCE mandatory},
-       ...
-}
-*/
-
-struct SecondaryRATUsageReport_ItemIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_IES::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 2; }
-               void clear() {type = 0;}
-               void select_id_SecondaryRATUsageReport_Item() { set(id_SecondaryRATUsageReport_Item); type=1;}
-               X2AP_PROTOCOL_IES::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(id_SecondaryRATUsageReport_Item)) { type = 1; return true; }
-                       else { type = 2; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(id_SecondaryRATUsageReport_Item);} return false;
-                       case 2: type = 2; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_IES::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 2; }
-               void clear() {type = 0;}
-               void select_id_SecondaryRATUsageReport_Item() { set(reject); type=1;}
-               X2AP_PROTOCOL_IES::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(reject)) { type = 1; return true; }
-                       else { type = 2; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false;
-                       case 2: type = 2; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Value_t : asn::typefield<true>
-       {
-               ~Value_t()      {clear();}
-               size_t get_index() const {return type;}
-               SecondaryRATUsageReport_Item& select_id_SecondaryRATUsageReport_Item() { return set<SecondaryRATUsageReport_Item>(1); }
-               SecondaryRATUsageReport_Item const* get_id_SecondaryRATUsageReport_Item() const { return get<SecondaryRATUsageReport_Item>(1); }
-               bool is_unknown() const { return type == 2; }
-               void clear()
-               {
-                       switch(type)
-                       {
-                       case 1: var.destroy<SecondaryRATUsageReport_Item>(); break;
-                       }
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-                       v.template operator()<SecondaryRATUsageReport_Item>(1);
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: v(select_id_SecondaryRATUsageReport_Item()); return true;
-                       case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       switch(type)
-                       {
-                       case 1: v(var.as<SecondaryRATUsageReport_Item>()); return true;
-                       }
-                       return false;
-
-               }
-               private:
-               template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
-               template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
-               union union_type
-               {
-                       char dummy1[sizeof(SecondaryRATUsageReport_Item)];
-
-               };
-               asn::variant<sizeof(union_type)> var;
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_IES::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 2; }
-               void clear() {type = 0;}
-               void select_id_SecondaryRATUsageReport_Item() { set(mandatory); type=1;}
-               X2AP_PROTOCOL_IES::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(mandatory)) { type = 1; return true; }
-                       else { type = 2; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(mandatory);} return false;
-                       case 2: type = 2; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-SecondaryRATUsageReportList ::= SEQUENCE (SIZE(1..maxnoofBearers)) OF ProtocolIE-Single-Container {{SecondaryRATUsageReport-ItemIEs}}
-*/
-
-struct SecondaryRATUsageReportList_elm : ProtocolIE_Single_Container<SecondaryRATUsageReport_ItemIEs>
-{
-       static constexpr const char* name() {return "SecondaryRATUsageReportList_elm";}
-       using parent_t = ProtocolIE_Single_Container<SecondaryRATUsageReport_ItemIEs>;
-
-};
-struct SecondaryRATUsageReportList : asn::sequenceof<SecondaryRATUsageReportList_elm>
-{
-       static constexpr const char* name() {return "SecondaryRATUsageReportList";}
-       using parent_t = asn::sequenceof<SecondaryRATUsageReportList_elm>;
-       using constraint_t = asn::constraints<false,asn::span<1,  maxnoofBearers >>;
-
-};
-/*
-ServedCell-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct ServedCell_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-ServedCell-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       { ID id-Number-of-Antennaports                          CRITICALITY ignore      EXTENSION Number-of-Antennaports                                        PRESENCE optional}|
-       { ID id-PRACH-Configuration                                     CRITICALITY ignore      EXTENSION PRACH-Configuration                                           PRESENCE optional}|
-       { ID id-MBSFN-Subframe-Info                                     CRITICALITY ignore      EXTENSION MBSFN-Subframe-Infolist                               PRESENCE optional}|
-       { ID id-CSG-Id                                                          CRITICALITY ignore      EXTENSION CSG-Id                                                                        PRESENCE optional}|
-       { ID id-MBMS-Service-Area-List                          CRITICALITY ignore      EXTENSION MBMS-Service-Area-Identity-List               PRESENCE optional}|
-       { ID id-MultibandInfoList                                       CRITICALITY ignore      EXTENSION MultibandInfoList                                                     PRESENCE optional}|
-       { ID id-FreqBandIndicatorPriority                       CRITICALITY ignore      EXTENSION FreqBandIndicatorPriority                             PRESENCE optional}|
-       { ID id-BandwidthReducedSI                                      CRITICALITY ignore      EXTENSION BandwidthReducedSI                                            PRESENCE optional}|
-       { ID id-ProtectedEUTRAResourceIndication        CRITICALITY ignore      EXTENSION ProtectedEUTRAResourceIndication      PRESENCE optional},
-       ...
-}
-*/
-
-struct ServedCell_Information_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 10; }
-               void clear() {type = 0;}
-               void select_id_Number_of_Antennaports() { set(id_Number_of_Antennaports); type=1;}
-               void select_id_PRACH_Configuration() { set(id_PRACH_Configuration); type=2;}
-               void select_id_MBSFN_Subframe_Info() { set(id_MBSFN_Subframe_Info); type=3;}
-               void select_id_CSG_Id() { set(id_CSG_Id); type=4;}
-               void select_id_MBMS_Service_Area_List() { set(id_MBMS_Service_Area_List); type=5;}
-               void select_id_MultibandInfoList() { set(id_MultibandInfoList); type=6;}
-               void select_id_FreqBandIndicatorPriority() { set(id_FreqBandIndicatorPriority); type=7;}
-               void select_id_BandwidthReducedSI() { set(id_BandwidthReducedSI); type=8;}
-               void select_id_ProtectedEUTRAResourceIndication() { set(id_ProtectedEUTRAResourceIndication); type=9;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(id_Number_of_Antennaports)) { type = 1; return true; }
-                       else if(equal(id_PRACH_Configuration)) { type = 2; return true; }
-                       else if(equal(id_MBSFN_Subframe_Info)) { type = 3; return true; }
-                       else if(equal(id_CSG_Id)) { type = 4; return true; }
-                       else if(equal(id_MBMS_Service_Area_List)) { type = 5; return true; }
-                       else if(equal(id_MultibandInfoList)) { type = 6; return true; }
-                       else if(equal(id_FreqBandIndicatorPriority)) { type = 7; return true; }
-                       else if(equal(id_BandwidthReducedSI)) { type = 8; return true; }
-                       else if(equal(id_ProtectedEUTRAResourceIndication)) { type = 9; return true; }
-                       else { type = 10; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(id_Number_of_Antennaports);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(id_PRACH_Configuration);} return false;
-                       case 3: type = 3; if(v(ref_nested())) { return equal(id_MBSFN_Subframe_Info);} return false;
-                       case 4: type = 4; if(v(ref_nested())) { return equal(id_CSG_Id);} return false;
-                       case 5: type = 5; if(v(ref_nested())) { return equal(id_MBMS_Service_Area_List);} return false;
-                       case 6: type = 6; if(v(ref_nested())) { return equal(id_MultibandInfoList);} return false;
-                       case 7: type = 7; if(v(ref_nested())) { return equal(id_FreqBandIndicatorPriority);} return false;
-                       case 8: type = 8; if(v(ref_nested())) { return equal(id_BandwidthReducedSI);} return false;
-                       case 9: type = 9; if(v(ref_nested())) { return equal(id_ProtectedEUTRAResourceIndication);} return false;
-                       case 10: type = 10; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 10; }
-               void clear() {type = 0;}
-               void select_id_Number_of_Antennaports() { set(ignore); type=1;}
-               void select_id_PRACH_Configuration() { set(ignore); type=2;}
-               void select_id_MBSFN_Subframe_Info() { set(ignore); type=3;}
-               void select_id_CSG_Id() { set(ignore); type=4;}
-               void select_id_MBMS_Service_Area_List() { set(ignore); type=5;}
-               void select_id_MultibandInfoList() { set(ignore); type=6;}
-               void select_id_FreqBandIndicatorPriority() { set(ignore); type=7;}
-               void select_id_BandwidthReducedSI() { set(ignore); type=8;}
-               void select_id_ProtectedEUTRAResourceIndication() { set(ignore); type=9;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(ignore)) { type = 1; return true; }
-                       else if(equal(ignore)) { type = 2; return true; }
-                       else if(equal(ignore)) { type = 3; return true; }
-                       else if(equal(ignore)) { type = 4; return true; }
-                       else if(equal(ignore)) { type = 5; return true; }
-                       else if(equal(ignore)) { type = 6; return true; }
-                       else if(equal(ignore)) { type = 7; return true; }
-                       else if(equal(ignore)) { type = 8; return true; }
-                       else if(equal(ignore)) { type = 9; return true; }
-                       else { type = 10; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 3: type = 3; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 4: type = 4; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 5: type = 5; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 6: type = 6; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 7: type = 7; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 8: type = 8; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 9: type = 9; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 10: type = 10; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               Number_of_Antennaports& select_id_Number_of_Antennaports() { return set<Number_of_Antennaports>(1); }
-               Number_of_Antennaports const* get_id_Number_of_Antennaports() const { return get<Number_of_Antennaports>(1); }
-               PRACH_Configuration& select_id_PRACH_Configuration() { return set<PRACH_Configuration>(2); }
-               PRACH_Configuration const* get_id_PRACH_Configuration() const { return get<PRACH_Configuration>(2); }
-               MBSFN_Subframe_Infolist& select_id_MBSFN_Subframe_Info() { return set<MBSFN_Subframe_Infolist>(3); }
-               MBSFN_Subframe_Infolist const* get_id_MBSFN_Subframe_Info() const { return get<MBSFN_Subframe_Infolist>(3); }
-               CSG_Id& select_id_CSG_Id() { return set<CSG_Id>(4); }
-               CSG_Id const* get_id_CSG_Id() const { return get<CSG_Id>(4); }
-               MBMS_Service_Area_Identity_List& select_id_MBMS_Service_Area_List() { return set<MBMS_Service_Area_Identity_List>(5); }
-               MBMS_Service_Area_Identity_List const* get_id_MBMS_Service_Area_List() const { return get<MBMS_Service_Area_Identity_List>(5); }
-               MultibandInfoList& select_id_MultibandInfoList() { return set<MultibandInfoList>(6); }
-               MultibandInfoList const* get_id_MultibandInfoList() const { return get<MultibandInfoList>(6); }
-               FreqBandIndicatorPriority& select_id_FreqBandIndicatorPriority() { return set<FreqBandIndicatorPriority>(7); }
-               FreqBandIndicatorPriority const* get_id_FreqBandIndicatorPriority() const { return get<FreqBandIndicatorPriority>(7); }
-               BandwidthReducedSI& select_id_BandwidthReducedSI() { return set<BandwidthReducedSI>(8); }
-               BandwidthReducedSI const* get_id_BandwidthReducedSI() const { return get<BandwidthReducedSI>(8); }
-               ProtectedEUTRAResourceIndication& select_id_ProtectedEUTRAResourceIndication() { return set<ProtectedEUTRAResourceIndication>(9); }
-               ProtectedEUTRAResourceIndication const* get_id_ProtectedEUTRAResourceIndication() const { return get<ProtectedEUTRAResourceIndication>(9); }
-               bool is_unknown() const { return type == 10; }
-               void clear()
-               {
-                       switch(type)
-                       {
-                       case 1: var.destroy<Number_of_Antennaports>(); break;
-                       case 2: var.destroy<PRACH_Configuration>(); break;
-                       case 3: var.destroy<MBSFN_Subframe_Infolist>(); break;
-                       case 4: var.destroy<CSG_Id>(); break;
-                       case 5: var.destroy<MBMS_Service_Area_Identity_List>(); break;
-                       case 6: var.destroy<MultibandInfoList>(); break;
-                       case 7: var.destroy<FreqBandIndicatorPriority>(); break;
-                       case 8: var.destroy<BandwidthReducedSI>(); break;
-                       case 9: var.destroy<ProtectedEUTRAResourceIndication>(); break;
-                       }
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-                       v.template operator()<Number_of_Antennaports>(1);
-                       v.template operator()<PRACH_Configuration>(2);
-                       v.template operator()<MBSFN_Subframe_Infolist>(3);
-                       v.template operator()<CSG_Id>(4);
-                       v.template operator()<MBMS_Service_Area_Identity_List>(5);
-                       v.template operator()<MultibandInfoList>(6);
-                       v.template operator()<FreqBandIndicatorPriority>(7);
-                       v.template operator()<BandwidthReducedSI>(8);
-                       v.template operator()<ProtectedEUTRAResourceIndication>(9);
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: v(select_id_Number_of_Antennaports()); return true;
-                       case 2: v(select_id_PRACH_Configuration()); return true;
-                       case 3: v(select_id_MBSFN_Subframe_Info()); return true;
-                       case 4: v(select_id_CSG_Id()); return true;
-                       case 5: v(select_id_MBMS_Service_Area_List()); return true;
-                       case 6: v(select_id_MultibandInfoList()); return true;
-                       case 7: v(select_id_FreqBandIndicatorPriority()); return true;
-                       case 8: v(select_id_BandwidthReducedSI()); return true;
-                       case 9: v(select_id_ProtectedEUTRAResourceIndication()); return true;
-                       case 10: if(type != 10) {clear(); asn::base::set();} type = 10; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       switch(type)
-                       {
-                       case 1: v(var.as<Number_of_Antennaports>()); return true;
-                       case 2: v(var.as<PRACH_Configuration>()); return true;
-                       case 3: v(var.as<MBSFN_Subframe_Infolist>()); return true;
-                       case 4: v(var.as<CSG_Id>()); return true;
-                       case 5: v(var.as<MBMS_Service_Area_Identity_List>()); return true;
-                       case 6: v(var.as<MultibandInfoList>()); return true;
-                       case 7: v(var.as<FreqBandIndicatorPriority>()); return true;
-                       case 8: v(var.as<BandwidthReducedSI>()); return true;
-                       case 9: v(var.as<ProtectedEUTRAResourceIndication>()); return true;
-                       }
-                       return false;
-
-               }
-               private:
-               template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
-               template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
-               union union_type
-               {
-                       char dummy1[sizeof(BandwidthReducedSI)];
-                       char dummy2[sizeof(CSG_Id)];
-                       char dummy3[sizeof(FreqBandIndicatorPriority)];
-                       char dummy4[sizeof(MBMS_Service_Area_Identity_List)];
-                       char dummy5[sizeof(MBSFN_Subframe_Infolist)];
-                       char dummy6[sizeof(MultibandInfoList)];
-                       char dummy7[sizeof(Number_of_Antennaports)];
-                       char dummy8[sizeof(PRACH_Configuration)];
-                       char dummy9[sizeof(ProtectedEUTRAResourceIndication)];
-
-               };
-               asn::variant<sizeof(union_type)> var;
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 10; }
-               void clear() {type = 0;}
-               void select_id_Number_of_Antennaports() { set(optional); type=1;}
-               void select_id_PRACH_Configuration() { set(optional); type=2;}
-               void select_id_MBSFN_Subframe_Info() { set(optional); type=3;}
-               void select_id_CSG_Id() { set(optional); type=4;}
-               void select_id_MBMS_Service_Area_List() { set(optional); type=5;}
-               void select_id_MultibandInfoList() { set(optional); type=6;}
-               void select_id_FreqBandIndicatorPriority() { set(optional); type=7;}
-               void select_id_BandwidthReducedSI() { set(optional); type=8;}
-               void select_id_ProtectedEUTRAResourceIndication() { set(optional); type=9;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(optional)) { type = 1; return true; }
-                       else if(equal(optional)) { type = 2; return true; }
-                       else if(equal(optional)) { type = 3; return true; }
-                       else if(equal(optional)) { type = 4; return true; }
-                       else if(equal(optional)) { type = 5; return true; }
-                       else if(equal(optional)) { type = 6; return true; }
-                       else if(equal(optional)) { type = 7; return true; }
-                       else if(equal(optional)) { type = 8; return true; }
-                       else if(equal(optional)) { type = 9; return true; }
-                       else { type = 10; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 3: type = 3; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 4: type = 4; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 5: type = 5; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 6: type = 6; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 7: type = 7; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 8: type = 8; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 9: type = 9; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 10: type = 10; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-ServedCell-Information ::= SEQUENCE {
-       pCI                                     PCI,
-       cellId                          ECGI,
-       tAC                                     TAC,
-       broadcastPLMNs          BroadcastPLMNs-Item,
-       eUTRA-Mode-Info         EUTRA-Mode-Info,
-       iE-Extensions           ProtocolExtensionContainer { {ServedCell-Information-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct ServedCell_Information : asn::sequence<6, 0, true, 1>
-{
-       static constexpr const char* name() {return "ServedCell-Information";}
-       using parent_t = asn::sequence<6, 0, true, 1>;
-       struct pCI_t : PCI
-       {
-               static constexpr const char* name() {return "pCI_t";}
-               using parent_t = PCI;
-
-       };
-       pCI_t& ref_pCI() {return pCI;}
-       pCI_t const& ref_pCI() const {return pCI;}
-       struct cellId_t : ECGI
-       {
-               static constexpr const char* name() {return "cellId_t";}
-               using parent_t = ECGI;
-
-       };
-       cellId_t& ref_cellId() {return cellId;}
-       cellId_t const& ref_cellId() const {return cellId;}
-       struct tAC_t : TAC
-       {
-               static constexpr const char* name() {return "tAC_t";}
-               using parent_t = TAC;
-
-       };
-       tAC_t& ref_tAC() {return tAC;}
-       tAC_t const& ref_tAC() const {return tAC;}
-       struct broadcastPLMNs_t : BroadcastPLMNs_Item
-       {
-               static constexpr const char* name() {return "broadcastPLMNs_t";}
-               using parent_t = BroadcastPLMNs_Item;
-
-       };
-       broadcastPLMNs_t& ref_broadcastPLMNs() {return broadcastPLMNs;}
-       broadcastPLMNs_t const& ref_broadcastPLMNs() const {return broadcastPLMNs;}
-       struct eUTRA_Mode_Info_t : EUTRA_Mode_Info
-       {
-               static constexpr const char* name() {return "eUTRA_Mode_Info_t";}
-               using parent_t = EUTRA_Mode_Info;
-
-       };
-       eUTRA_Mode_Info_t& ref_eUTRA_Mode_Info() {return eUTRA_Mode_Info;}
-       eUTRA_Mode_Info_t const& ref_eUTRA_Mode_Info() const {return eUTRA_Mode_Info;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<ServedCell_Information_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<ServedCell_Information_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(pCI);
-               v(cellId);
-               v(tAC);
-               v(broadcastPLMNs);
-               v(eUTRA_Mode_Info);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(pCI);
-               v(cellId);
-               v(tAC);
-               v(broadcastPLMNs);
-               v(eUTRA_Mode_Info);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               pCI.clear();
-               cellId.clear();
-               tAC.clear();
-               broadcastPLMNs.clear();
-               eUTRA_Mode_Info.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       pCI_t   pCI;
-       cellId_t        cellId;
-       tAC_t   tAC;
-       broadcastPLMNs_t        broadcastPLMNs;
-       eUTRA_Mode_Info_t       eUTRA_Mode_Info;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-ServedCells ::= SEQUENCE (SIZE (1.. maxCellineNB)) OF SEQUENCE {
-       servedCellInfo                                  ServedCell-Information,
-       neighbour-Info                                  Neighbour-Information                   OPTIONAL,
-       iE-Extensions                                   ProtocolExtensionContainer { {ServedCell-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct ServedCells_elm : asn::sequence<3, 0, true, 2>
-{
-       static constexpr const char* name() {return "ServedCells_elm";}
-       using parent_t = asn::sequence<3, 0, true, 2>;
-       struct servedCellInfo_t : ServedCell_Information
-       {
-               static constexpr const char* name() {return "servedCellInfo_t";}
-               using parent_t = ServedCell_Information;
-
-       };
-       servedCellInfo_t& ref_servedCellInfo() {return servedCellInfo;}
-       servedCellInfo_t const& ref_servedCellInfo() const {return servedCellInfo;}
-       struct neighbour_Info_t : Neighbour_Information
-       {
-               static constexpr const char* name() {return "neighbour_Info_t";}
-               using parent_t = Neighbour_Information;
-               static constexpr bool optional = true;
-
-       };
-       neighbour_Info_t& set_neighbour_Info() { neighbour_Info.setpresent(true); return neighbour_Info;}
-       neighbour_Info_t const* get_neighbour_Info() const {return neighbour_Info.is_valid() ? &neighbour_Info : nullptr;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<ServedCell_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<ServedCell_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(servedCellInfo);
-               v(neighbour_Info);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(servedCellInfo);
-               v(neighbour_Info);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               servedCellInfo.clear();
-               neighbour_Info.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       servedCellInfo_t        servedCellInfo;
-       neighbour_Info_t        neighbour_Info;
-       iE_Extensions_t iE_Extensions;
-
-};
-struct ServedCells : asn::sequenceof<ServedCells_elm>
-{
-       static constexpr const char* name() {return "ServedCells";}
-       using parent_t = asn::sequenceof<ServedCells_elm>;
-       using constraint_t = asn::constraints<false,asn::span<1,  maxCellineNB >>;
-
-};
-/*
-ServiceType ::= ENUMERATED{
-       qMC-for-streaming-service,
-       qMC-for-MTSI-service,
-       ...
-}
-*/
-
-struct ServiceType : asn::enumerated<2, 0, true>
-{
-       static constexpr const char* name() {return "ServiceType";}
-       using parent_t = asn::enumerated<2, 0, true>;
-       typedef enum {
-               qMC_for_streaming_service
-               ,qMC_for_MTSI_service
-       } index_t;
-
-};
-
-/*
-SgNB-UE-X2AP-ID ::= INTEGER (0..4294967295)
-*/
-
-struct SgNB_UE_X2AP_ID : asn::integer<>
-{
-       using constraint_t = asn::constraints<false,asn::span<0, 4294967295>>;
-       static constexpr const char* name() {return "SgNB-UE-X2AP-ID";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-SgNBCoordinationAssistanceInformation ::= ENUMERATED{
-       coordination-not-required,
-       ...
-}
-*/
-
-struct SgNBCoordinationAssistanceInformation : asn::enumerated<1, 0, true>
-{
-       static constexpr const char* name() {return "SgNBCoordinationAssistanceInformation";}
-       using parent_t = asn::enumerated<1, 0, true>;
-       typedef enum {
-               coordination_not_required
-       } index_t;
-
-};
-
-/*
-SgNBResourceCoordinationInformationExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       { ID id-ECGI                                                                            CRITICALITY ignore      EXTENSION ECGI                                                                                          PRESENCE optional}|
-       { ID id-SgNBCoordinationAssistanceInformation           CRITICALITY reject      EXTENSION SgNBCoordinationAssistanceInformation PRESENCE optional},
-       ...
-}
-*/
-
-struct SgNBResourceCoordinationInformationExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 3; }
-               void clear() {type = 0;}
-               void select_id_ECGI() { set(id_ECGI); type=1;}
-               void select_id_SgNBCoordinationAssistanceInformation() { set(id_SgNBCoordinationAssistanceInformation); type=2;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(id_ECGI)) { type = 1; return true; }
-                       else if(equal(id_SgNBCoordinationAssistanceInformation)) { type = 2; return true; }
-                       else { type = 3; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(id_ECGI);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(id_SgNBCoordinationAssistanceInformation);} return false;
-                       case 3: type = 3; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 3; }
-               void clear() {type = 0;}
-               void select_id_ECGI() { set(ignore); type=1;}
-               void select_id_SgNBCoordinationAssistanceInformation() { set(reject); type=2;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(ignore)) { type = 1; return true; }
-                       else if(equal(reject)) { type = 2; return true; }
-                       else { type = 3; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false;
-                       case 3: type = 3; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               ECGI& select_id_ECGI() { return set<ECGI>(1); }
-               ECGI const* get_id_ECGI() const { return get<ECGI>(1); }
-               SgNBCoordinationAssistanceInformation& select_id_SgNBCoordinationAssistanceInformation() { return set<SgNBCoordinationAssistanceInformation>(2); }
-               SgNBCoordinationAssistanceInformation const* get_id_SgNBCoordinationAssistanceInformation() const { return get<SgNBCoordinationAssistanceInformation>(2); }
-               bool is_unknown() const { return type == 3; }
-               void clear()
-               {
-                       switch(type)
-                       {
-                       case 1: var.destroy<ECGI>(); break;
-                       case 2: var.destroy<SgNBCoordinationAssistanceInformation>(); break;
-                       }
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-                       v.template operator()<ECGI>(1);
-                       v.template operator()<SgNBCoordinationAssistanceInformation>(2);
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: v(select_id_ECGI()); return true;
-                       case 2: v(select_id_SgNBCoordinationAssistanceInformation()); return true;
-                       case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       switch(type)
-                       {
-                       case 1: v(var.as<ECGI>()); return true;
-                       case 2: v(var.as<SgNBCoordinationAssistanceInformation>()); return true;
-                       }
-                       return false;
-
-               }
-               private:
-               template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
-               template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
-               union union_type
-               {
-                       char dummy1[sizeof(ECGI)];
-                       char dummy2[sizeof(SgNBCoordinationAssistanceInformation)];
-
-               };
-               asn::variant<sizeof(union_type)> var;
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 3; }
-               void clear() {type = 0;}
-               void select_id_ECGI() { set(optional); type=1;}
-               void select_id_SgNBCoordinationAssistanceInformation() { set(optional); type=2;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(optional)) { type = 1; return true; }
-                       else if(equal(optional)) { type = 2; return true; }
-                       else { type = 3; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 3: type = 3; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-SgNBResourceCoordinationInformation ::= SEQUENCE {
-       nR-CGI                                                  NRCGI,
-       uLCoordinationInformation               BIT STRING (SIZE(6..4400, ...)),
-       dLCoordinationInformation               BIT STRING (SIZE(6..4400, ...)) OPTIONAL,
-       iE-Extensions                                   ProtocolExtensionContainer { {SgNBResourceCoordinationInformationExtIEs} }               OPTIONAL,
-       ...
-}
-*/
-
-struct SgNBResourceCoordinationInformation : asn::sequence<4, 0, true, 2>
-{
-       static constexpr const char* name() {return "SgNBResourceCoordinationInformation";}
-       using parent_t = asn::sequence<4, 0, true, 2>;
-       struct nR_CGI_t : NRCGI
-       {
-               static constexpr const char* name() {return "nR_CGI_t";}
-               using parent_t = NRCGI;
-
-       };
-       nR_CGI_t& ref_nR_CGI() {return nR_CGI;}
-       nR_CGI_t const& ref_nR_CGI() const {return nR_CGI;}
-       struct uLCoordinationInformation_t : asn::bstring<>
-       {
-               using constraint_t = asn::constraints<true,asn::span<6, 4400>>;
-               static constexpr const char* name() {return "uLCoordinationInformation_t";}
-               using parent_t = asn::bstring<>;
-
-       };
-
-       uLCoordinationInformation_t& ref_uLCoordinationInformation() {return uLCoordinationInformation;}
-       uLCoordinationInformation_t const& ref_uLCoordinationInformation() const {return uLCoordinationInformation;}
-       struct dLCoordinationInformation_t : asn::bstring<>
-       {
-               using constraint_t = asn::constraints<true,asn::span<6, 4400>>;
-               static constexpr const char* name() {return "dLCoordinationInformation_t";}
-               using parent_t = asn::bstring<>;
-               static constexpr bool optional = true;
-
-       };
-
-       dLCoordinationInformation_t& set_dLCoordinationInformation() { dLCoordinationInformation.setpresent(true); return dLCoordinationInformation;}
-       dLCoordinationInformation_t const* get_dLCoordinationInformation() const {return dLCoordinationInformation.is_valid() ? &dLCoordinationInformation : nullptr;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<SgNBResourceCoordinationInformationExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<SgNBResourceCoordinationInformationExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(nR_CGI);
-               v(uLCoordinationInformation);
-               v(dLCoordinationInformation);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(nR_CGI);
-               v(uLCoordinationInformation);
-               v(dLCoordinationInformation);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               nR_CGI.clear();
-               uLCoordinationInformation.clear();
-               dLCoordinationInformation.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       nR_CGI_t        nR_CGI;
-       uLCoordinationInformation_t     uLCoordinationInformation;
-       dLCoordinationInformation_t     dLCoordinationInformation;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-SgNBSecurityKey ::= BIT STRING (SIZE(256))
-*/
-
-struct SgNBSecurityKey : asn::bstring<>
-{
-       using constraint_t = asn::constraints<false,asn::one<256>>;
-       static constexpr const char* name() {return "SgNBSecurityKey";}
-       using parent_t = asn::bstring<>;
-
-};
-
-/*
-SgNBtoMeNBContainer ::= OCTET STRING
-*/
-
-struct SgNBtoMeNBContainer : asn::ostring<>
-{
-       static constexpr const char* name() {return "SgNBtoMeNBContainer";}
-       using parent_t = asn::ostring<>;
-
-};
-
-/*
-ShortMAC-I ::= BIT STRING (SIZE(16))
-*/
-
-struct ShortMAC_I : asn::bstring<>
-{
-       using constraint_t = asn::constraints<false,asn::one<16>>;
-       static constexpr const char* name() {return "ShortMAC-I";}
-       using parent_t = asn::bstring<>;
-
-};
-
-/*
-SpectrumSharingGroupID ::= INTEGER (1..maxCellineNB)
-*/
-
-struct SpectrumSharingGroupID : asn::integer<>
-{
-       using constraint_t = asn::constraints<false,asn::span<1,  maxCellineNB >>;
-       static constexpr const char* name() {return "SpectrumSharingGroupID";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-SplitSRB-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct SplitSRB_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-SplitSRB ::= SEQUENCE {
-       rrcContainer                            RRCContainer                    OPTIONAL,
-       srbType                                         SRBType,
-       deliveryStatus                          DeliveryStatus                  OPTIONAL,
-       iE-Extensions                           ProtocolExtensionContainer { {SplitSRB-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct SplitSRB : asn::sequence<4, 0, true, 3>
-{
-       static constexpr const char* name() {return "SplitSRB";}
-       using parent_t = asn::sequence<4, 0, true, 3>;
-       struct rrcContainer_t : RRCContainer
-       {
-               static constexpr const char* name() {return "rrcContainer_t";}
-               using parent_t = RRCContainer;
-               static constexpr bool optional = true;
-
-       };
-       rrcContainer_t& set_rrcContainer() { rrcContainer.setpresent(true); return rrcContainer;}
-       rrcContainer_t const* get_rrcContainer() const {return rrcContainer.is_valid() ? &rrcContainer : nullptr;}
-       struct srbType_t : SRBType
-       {
-               static constexpr const char* name() {return "srbType_t";}
-               using parent_t = SRBType;
-
-       };
-       srbType_t& ref_srbType() {return srbType;}
-       srbType_t const& ref_srbType() const {return srbType;}
-       struct deliveryStatus_t : DeliveryStatus
-       {
-               static constexpr const char* name() {return "deliveryStatus_t";}
-               using parent_t = DeliveryStatus;
-               static constexpr bool optional = true;
-
-       };
-       deliveryStatus_t& set_deliveryStatus() { deliveryStatus.setpresent(true); return deliveryStatus;}
-       deliveryStatus_t const* get_deliveryStatus() const {return deliveryStatus.is_valid() ? &deliveryStatus : nullptr;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<SplitSRB_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<SplitSRB_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(rrcContainer);
-               v(srbType);
-               v(deliveryStatus);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(rrcContainer);
-               v(srbType);
-               v(deliveryStatus);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               rrcContainer.clear();
-               srbType.clear();
-               deliveryStatus.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       rrcContainer_t  rrcContainer;
-       srbType_t       srbType;
-       deliveryStatus_t        deliveryStatus;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-SplitSRBs ::= ENUMERATED {srb1, srb2, srb1and2, ...}
-*/
-
-struct SplitSRBs : asn::enumerated<3, 0, true>
-{
-       static constexpr const char* name() {return "SplitSRBs";}
-       using parent_t = asn::enumerated<3, 0, true>;
-       typedef enum {
-               srb1
-               ,srb2
-               ,srb1and2
-       } index_t;
-
-};
-
-/*
-SubscriberProfileIDforRFP ::= INTEGER (1..256)
-*/
-
-struct SubscriberProfileIDforRFP : asn::integer<>
-{
-       using constraint_t = asn::constraints<false,asn::span<1, 256>>;
-       static constexpr const char* name() {return "SubscriberProfileIDforRFP";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-Subscription-Based-UE-DifferentiationInfo-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct Subscription_Based_UE_DifferentiationInfo_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-Subscription-Based-UE-DifferentiationInfo ::= SEQUENCE {
-       periodicCommunicationIndicator  ENUMERATED {periodically, ondemand, ...}                OPTIONAL,
-       periodicTime                                    INTEGER (1..3600, ...)                                                  OPTIONAL,
-       scheduledCommunicationTime              ScheduledCommunicationTime                                              OPTIONAL,
-       stationaryIndication                    ENUMERATED {stationary, mobile, ...}                    OPTIONAL,
-       trafficProfile                                  ENUMERATED {single-packet, dual-packets, multiple-packets, ...}                         OPTIONAL,
-       batteryIndication                               ENUMERATED {battery-powered, battery-powered-not-rechargeable-or-replaceable, not-battery-powered, ...}         OPTIONAL,
-       iE-Extensions                                   ProtocolExtensionContainer { { Subscription-Based-UE-DifferentiationInfo-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct Subscription_Based_UE_DifferentiationInfo : asn::sequence<7, 0, true, 7>
-{
-       static constexpr const char* name() {return "Subscription-Based-UE-DifferentiationInfo";}
-       using parent_t = asn::sequence<7, 0, true, 7>;
-       struct periodicCommunicationIndicator_t : asn::enumerated<2, 0, true>
-       {
-               static constexpr const char* name() {return "periodicCommunicationIndicator_t";}
-               using parent_t = asn::enumerated<2, 0, true>;
-               static constexpr bool optional = true;
-               typedef enum {
-                       periodically
-                       ,ondemand
-               } index_t;
-
-       };
-
-       periodicCommunicationIndicator_t& set_periodicCommunicationIndicator() { periodicCommunicationIndicator.setpresent(true); return periodicCommunicationIndicator;}
-       periodicCommunicationIndicator_t const* get_periodicCommunicationIndicator() const {return periodicCommunicationIndicator.is_valid() ? &periodicCommunicationIndicator : nullptr;}
-       struct periodicTime_t : asn::integer<>
-       {
-               using constraint_t = asn::constraints<true,asn::span<1, 3600>>;
-               static constexpr const char* name() {return "periodicTime_t";}
-               using parent_t = asn::integer<>;
-               static constexpr bool optional = true;
-
-       };
-
-       periodicTime_t& set_periodicTime() { periodicTime.setpresent(true); return periodicTime;}
-       periodicTime_t const* get_periodicTime() const {return periodicTime.is_valid() ? &periodicTime : nullptr;}
-       struct scheduledCommunicationTime_t : ScheduledCommunicationTime
-       {
-               static constexpr const char* name() {return "scheduledCommunicationTime_t";}
-               using parent_t = ScheduledCommunicationTime;
-               static constexpr bool optional = true;
-
-       };
-       scheduledCommunicationTime_t& set_scheduledCommunicationTime() { scheduledCommunicationTime.setpresent(true); return scheduledCommunicationTime;}
-       scheduledCommunicationTime_t const* get_scheduledCommunicationTime() const {return scheduledCommunicationTime.is_valid() ? &scheduledCommunicationTime : nullptr;}
-       struct stationaryIndication_t : asn::enumerated<2, 0, true>
-       {
-               static constexpr const char* name() {return "stationaryIndication_t";}
-               using parent_t = asn::enumerated<2, 0, true>;
-               static constexpr bool optional = true;
-               typedef enum {
-                       stationary
-                       ,mobile
-               } index_t;
-
-       };
-
-       stationaryIndication_t& set_stationaryIndication() { stationaryIndication.setpresent(true); return stationaryIndication;}
-       stationaryIndication_t const* get_stationaryIndication() const {return stationaryIndication.is_valid() ? &stationaryIndication : nullptr;}
-       struct trafficProfile_t : asn::enumerated<3, 0, true>
-       {
-               static constexpr const char* name() {return "trafficProfile_t";}
-               using parent_t = asn::enumerated<3, 0, true>;
-               static constexpr bool optional = true;
-               typedef enum {
-                       single_packet
-                       ,dual_packets
-                       ,multiple_packets
-               } index_t;
-
-       };
-
-       trafficProfile_t& set_trafficProfile() { trafficProfile.setpresent(true); return trafficProfile;}
-       trafficProfile_t const* get_trafficProfile() const {return trafficProfile.is_valid() ? &trafficProfile : nullptr;}
-       struct batteryIndication_t : asn::enumerated<3, 0, true>
-       {
-               static constexpr const char* name() {return "batteryIndication_t";}
-               using parent_t = asn::enumerated<3, 0, true>;
-               static constexpr bool optional = true;
-               typedef enum {
-                       battery_powered
-                       ,battery_powered_not_rechargeable_or_replaceable
-                       ,not_battery_powered
-               } index_t;
-
-       };
-
-       batteryIndication_t& set_batteryIndication() { batteryIndication.setpresent(true); return batteryIndication;}
-       batteryIndication_t const* get_batteryIndication() const {return batteryIndication.is_valid() ? &batteryIndication : nullptr;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<Subscription_Based_UE_DifferentiationInfo_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<Subscription_Based_UE_DifferentiationInfo_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(periodicCommunicationIndicator);
-               v(periodicTime);
-               v(scheduledCommunicationTime);
-               v(stationaryIndication);
-               v(trafficProfile);
-               v(batteryIndication);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(periodicCommunicationIndicator);
-               v(periodicTime);
-               v(scheduledCommunicationTime);
-               v(stationaryIndication);
-               v(trafficProfile);
-               v(batteryIndication);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               periodicCommunicationIndicator.clear();
-               periodicTime.clear();
-               scheduledCommunicationTime.clear();
-               stationaryIndication.clear();
-               trafficProfile.clear();
-               batteryIndication.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       periodicCommunicationIndicator_t        periodicCommunicationIndicator;
-       periodicTime_t  periodicTime;
-       scheduledCommunicationTime_t    scheduledCommunicationTime;
-       stationaryIndication_t  stationaryIndication;
-       trafficProfile_t        trafficProfile;
-       batteryIndication_t     batteryIndication;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-TargetCellInUTRAN ::= OCTET STRING -- This IE is to be encoded according to the UTRAN Cell ID in the Last Visited UTRAN Cell Information IE in TS 25.413 [24]
-*/
-
-struct TargetCellInUTRAN : asn::ostring<>
-{
-       static constexpr const char* name() {return "TargetCellInUTRAN";}
-       using parent_t = asn::ostring<>;
-
-};
-
-/*
-TargeteNBtoSource-eNBTransparentContainer      ::= OCTET STRING
-*/
-
-struct TargeteNBtoSource_eNBTransparentContainer : asn::ostring<>
-{
-       static constexpr const char* name() {return "TargeteNBtoSource-eNBTransparentContainer";}
-       using parent_t = asn::ostring<>;
-
-};
-
-/*
-TimeToWait ::= ENUMERATED {
-       v1s,
-       v2s,
-       v5s,
-       v10s,
-       v20s,
-       v60s,
-       ...
-}
-*/
-
-struct TimeToWait : asn::enumerated<6, 0, true>
-{
-       static constexpr const char* name() {return "TimeToWait";}
-       using parent_t = asn::enumerated<6, 0, true>;
-       typedef enum {
-               v1s
-               ,v2s
-               ,v5s
-               ,v10s
-               ,v20s
-               ,v60s
-       } index_t;
-
-};
-
-/*
-TraceDepth             ::= ENUMERATED {
-       minimum,
-       medium,
-       maximum,
-       minimumWithoutVendorSpecificExtension,
-       mediumWithoutVendorSpecificExtension,
-       maximumWithoutVendorSpecificExtension,
-       ...
-}
-*/
-
-struct TraceDepth : asn::enumerated<6, 0, true>
-{
-       static constexpr const char* name() {return "TraceDepth";}
-       using parent_t = asn::enumerated<6, 0, true>;
-       typedef enum {
-               minimum
-               ,medium
-               ,maximum
-               ,minimumWithoutVendorSpecificExtension
-               ,mediumWithoutVendorSpecificExtension
-               ,maximumWithoutVendorSpecificExtension
-       } index_t;
-
-};
-
-/*
-TraceCollectionEntityIPAddress ::= BIT STRING (SIZE(1..160, ...))
-*/
-
-struct TraceCollectionEntityIPAddress : asn::bstring<>
-{
-       using constraint_t = asn::constraints<true,asn::span<1, 160>>;
-       static constexpr const char* name() {return "TraceCollectionEntityIPAddress";}
-       using parent_t = asn::bstring<>;
-
-};
-
-/*
-UEAppLayerMeasConfig-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       {ID id-serviceType      CRITICALITY ignore      EXTENSION ServiceType   PRESENCE optional},
-       ...
-}
-*/
-
-struct UEAppLayerMeasConfig_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 2; }
-               void clear() {type = 0;}
-               void select_id_serviceType() { set(id_serviceType); type=1;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(id_serviceType)) { type = 1; return true; }
-                       else { type = 2; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(id_serviceType);} return false;
-                       case 2: type = 2; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 2; }
-               void clear() {type = 0;}
-               void select_id_serviceType() { set(ignore); type=1;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(ignore)) { type = 1; return true; }
-                       else { type = 2; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 2: type = 2; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               ServiceType& select_id_serviceType() { return set<ServiceType>(1); }
-               ServiceType const* get_id_serviceType() const { return get<ServiceType>(1); }
-               bool is_unknown() const { return type == 2; }
-               void clear()
-               {
-                       switch(type)
-                       {
-                       case 1: var.destroy<ServiceType>(); break;
-                       }
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-                       v.template operator()<ServiceType>(1);
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: v(select_id_serviceType()); return true;
-                       case 2: if(type != 2) {clear(); asn::base::set();} type = 2; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       switch(type)
-                       {
-                       case 1: v(var.as<ServiceType>()); return true;
-                       }
-                       return false;
-
-               }
-               private:
-               template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
-               template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
-               union union_type
-               {
-                       char dummy1[sizeof(ServiceType)];
-
-               };
-               asn::variant<sizeof(union_type)> var;
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 2; }
-               void clear() {type = 0;}
-               void select_id_serviceType() { set(optional); type=1;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(optional)) { type = 1; return true; }
-                       else { type = 2; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 2: type = 2; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-UEAppLayerMeasConfig ::= SEQUENCE {
-       containerForAppLayerMeasConfig                  OCTET STRING (SIZE(1..1000)),
-       areaScopeOfQMC          AreaScopeOfQMC,
-       iE-Extensions           ProtocolExtensionContainer { {UEAppLayerMeasConfig-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct UEAppLayerMeasConfig : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "UEAppLayerMeasConfig";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct containerForAppLayerMeasConfig_t : asn::ostring<>
-       {
-               using constraint_t = asn::constraints<false,asn::span<1, 1000>>;
-               static constexpr const char* name() {return "containerForAppLayerMeasConfig_t";}
-               using parent_t = asn::ostring<>;
-
-       };
-
-       containerForAppLayerMeasConfig_t& ref_containerForAppLayerMeasConfig() {return containerForAppLayerMeasConfig;}
-       containerForAppLayerMeasConfig_t const& ref_containerForAppLayerMeasConfig() const {return containerForAppLayerMeasConfig;}
-       struct areaScopeOfQMC_t : AreaScopeOfQMC
-       {
-               static constexpr const char* name() {return "areaScopeOfQMC_t";}
-               using parent_t = AreaScopeOfQMC;
-
-       };
-       areaScopeOfQMC_t& ref_areaScopeOfQMC() {return areaScopeOfQMC;}
-       areaScopeOfQMC_t const& ref_areaScopeOfQMC() const {return areaScopeOfQMC;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<UEAppLayerMeasConfig_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<UEAppLayerMeasConfig_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(containerForAppLayerMeasConfig);
-               v(areaScopeOfQMC);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(containerForAppLayerMeasConfig);
-               v(areaScopeOfQMC);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               containerForAppLayerMeasConfig.clear();
-               areaScopeOfQMC.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       containerForAppLayerMeasConfig_t        containerForAppLayerMeasConfig;
-       areaScopeOfQMC_t        areaScopeOfQMC;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-TraceActivation-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       { ID id-MDTConfiguration                        CRITICALITY ignore      EXTENSION MDT-Configuration                     PRESENCE optional}|
-       { ID id-UEAppLayerMeasConfig            CRITICALITY ignore      EXTENSION UEAppLayerMeasConfig          PRESENCE optional},
-       ...
-}
-*/
-
-struct TraceActivation_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 3; }
-               void clear() {type = 0;}
-               void select_id_MDTConfiguration() { set(id_MDTConfiguration); type=1;}
-               void select_id_UEAppLayerMeasConfig() { set(id_UEAppLayerMeasConfig); type=2;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(id_MDTConfiguration)) { type = 1; return true; }
-                       else if(equal(id_UEAppLayerMeasConfig)) { type = 2; return true; }
-                       else { type = 3; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(id_MDTConfiguration);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(id_UEAppLayerMeasConfig);} return false;
-                       case 3: type = 3; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 3; }
-               void clear() {type = 0;}
-               void select_id_MDTConfiguration() { set(ignore); type=1;}
-               void select_id_UEAppLayerMeasConfig() { set(ignore); type=2;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(ignore)) { type = 1; return true; }
-                       else if(equal(ignore)) { type = 2; return true; }
-                       else { type = 3; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 3: type = 3; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               MDT_Configuration& select_id_MDTConfiguration() { return set<MDT_Configuration>(1); }
-               MDT_Configuration const* get_id_MDTConfiguration() const { return get<MDT_Configuration>(1); }
-               UEAppLayerMeasConfig& select_id_UEAppLayerMeasConfig() { return set<UEAppLayerMeasConfig>(2); }
-               UEAppLayerMeasConfig const* get_id_UEAppLayerMeasConfig() const { return get<UEAppLayerMeasConfig>(2); }
-               bool is_unknown() const { return type == 3; }
-               void clear()
-               {
-                       switch(type)
-                       {
-                       case 1: var.destroy<MDT_Configuration>(); break;
-                       case 2: var.destroy<UEAppLayerMeasConfig>(); break;
-                       }
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-                       v.template operator()<MDT_Configuration>(1);
-                       v.template operator()<UEAppLayerMeasConfig>(2);
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: v(select_id_MDTConfiguration()); return true;
-                       case 2: v(select_id_UEAppLayerMeasConfig()); return true;
-                       case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       switch(type)
-                       {
-                       case 1: v(var.as<MDT_Configuration>()); return true;
-                       case 2: v(var.as<UEAppLayerMeasConfig>()); return true;
-                       }
-                       return false;
-
-               }
-               private:
-               template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
-               template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
-               union union_type
-               {
-                       char dummy1[sizeof(MDT_Configuration)];
-                       char dummy2[sizeof(UEAppLayerMeasConfig)];
-
-               };
-               asn::variant<sizeof(union_type)> var;
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 3; }
-               void clear() {type = 0;}
-               void select_id_MDTConfiguration() { set(optional); type=1;}
-               void select_id_UEAppLayerMeasConfig() { set(optional); type=2;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(optional)) { type = 1; return true; }
-                       else if(equal(optional)) { type = 2; return true; }
-                       else { type = 3; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 3: type = 3; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-TraceActivation ::= SEQUENCE {
-       eUTRANTraceID                                   EUTRANTraceID,
-       interfacesToTrace                               InterfacesToTrace,
-traceDepth                                                     TraceDepth,
-traceCollectionEntityIPAddress         TraceCollectionEntityIPAddress,
-       iE-Extensions                                   ProtocolExtensionContainer { {TraceActivation-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct TraceActivation : asn::sequence<5, 0, true, 1>
-{
-       static constexpr const char* name() {return "TraceActivation";}
-       using parent_t = asn::sequence<5, 0, true, 1>;
-       struct eUTRANTraceID_t : EUTRANTraceID
-       {
-               static constexpr const char* name() {return "eUTRANTraceID_t";}
-               using parent_t = EUTRANTraceID;
-
-       };
-       eUTRANTraceID_t& ref_eUTRANTraceID() {return eUTRANTraceID;}
-       eUTRANTraceID_t const& ref_eUTRANTraceID() const {return eUTRANTraceID;}
-       struct interfacesToTrace_t : InterfacesToTrace
-       {
-               static constexpr const char* name() {return "interfacesToTrace_t";}
-               using parent_t = InterfacesToTrace;
-
-       };
-       interfacesToTrace_t& ref_interfacesToTrace() {return interfacesToTrace;}
-       interfacesToTrace_t const& ref_interfacesToTrace() const {return interfacesToTrace;}
-       struct traceDepth_t : TraceDepth
-       {
-               static constexpr const char* name() {return "traceDepth_t";}
-               using parent_t = TraceDepth;
-
-       };
-       traceDepth_t& ref_traceDepth() {return traceDepth;}
-       traceDepth_t const& ref_traceDepth() const {return traceDepth;}
-       struct traceCollectionEntityIPAddress_t : TraceCollectionEntityIPAddress
-       {
-               static constexpr const char* name() {return "traceCollectionEntityIPAddress_t";}
-               using parent_t = TraceCollectionEntityIPAddress;
-
-       };
-       traceCollectionEntityIPAddress_t& ref_traceCollectionEntityIPAddress() {return traceCollectionEntityIPAddress;}
-       traceCollectionEntityIPAddress_t const& ref_traceCollectionEntityIPAddress() const {return traceCollectionEntityIPAddress;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<TraceActivation_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<TraceActivation_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(eUTRANTraceID);
-               v(interfacesToTrace);
-               v(traceDepth);
-               v(traceCollectionEntityIPAddress);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(eUTRANTraceID);
-               v(interfacesToTrace);
-               v(traceDepth);
-               v(traceCollectionEntityIPAddress);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               eUTRANTraceID.clear();
-               interfacesToTrace.clear();
-               traceDepth.clear();
-               traceCollectionEntityIPAddress.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       eUTRANTraceID_t eUTRANTraceID;
-       interfacesToTrace_t     interfacesToTrace;
-       traceDepth_t    traceDepth;
-       traceCollectionEntityIPAddress_t        traceCollectionEntityIPAddress;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-Tunnel-Information-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct Tunnel_Information_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-TunnelInformation ::= SEQUENCE {
-       transportLayerAddress   TransportLayerAddress,
-       uDP-Port-Number                 Port-Number                     OPTIONAL,
-       iE-Extensions                   ProtocolExtensionContainer { {Tunnel-Information-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct TunnelInformation : asn::sequence<3, 0, true, 2>
-{
-       static constexpr const char* name() {return "TunnelInformation";}
-       using parent_t = asn::sequence<3, 0, true, 2>;
-       struct transportLayerAddress_t : TransportLayerAddress
-       {
-               static constexpr const char* name() {return "transportLayerAddress_t";}
-               using parent_t = TransportLayerAddress;
-
-       };
-       transportLayerAddress_t& ref_transportLayerAddress() {return transportLayerAddress;}
-       transportLayerAddress_t const& ref_transportLayerAddress() const {return transportLayerAddress;}
-       struct uDP_Port_Number_t : Port_Number
-       {
-               static constexpr const char* name() {return "uDP_Port_Number_t";}
-               using parent_t = Port_Number;
-               static constexpr bool optional = true;
-
-       };
-       uDP_Port_Number_t& set_uDP_Port_Number() { uDP_Port_Number.setpresent(true); return uDP_Port_Number;}
-       uDP_Port_Number_t const* get_uDP_Port_Number() const {return uDP_Port_Number.is_valid() ? &uDP_Port_Number : nullptr;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<Tunnel_Information_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<Tunnel_Information_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(transportLayerAddress);
-               v(uDP_Port_Number);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(transportLayerAddress);
-               v(uDP_Port_Number);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               transportLayerAddress.clear();
-               uDP_Port_Number.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       transportLayerAddress_t transportLayerAddress;
-       uDP_Port_Number_t       uDP_Port_Number;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-UE-ContextKeptIndicator ::= ENUMERATED {
-       true,
-       ...
-}
-*/
-
-struct UE_ContextKeptIndicator : asn::enumerated<1, 0, true>
-{
-       static constexpr const char* name() {return "UE-ContextKeptIndicator";}
-       using parent_t = asn::enumerated<1, 0, true>;
-       typedef enum {
-               True
-       } index_t;
-
-};
-
-/*
-UE-HistoryInformation ::= SEQUENCE (SIZE(1..maxnoofCells)) OF LastVisitedCell-Item
-*/
-
-struct UE_HistoryInformation_elm : LastVisitedCell_Item
-{
-       static constexpr const char* name() {return "UE_HistoryInformation_elm";}
-       using parent_t = LastVisitedCell_Item;
-
-};
-struct UE_HistoryInformation : asn::sequenceof<UE_HistoryInformation_elm>
-{
-       static constexpr const char* name() {return "UE-HistoryInformation";}
-       using parent_t = asn::sequenceof<UE_HistoryInformation_elm>;
-       using constraint_t = asn::constraints<false,asn::span<1,  maxnoofCells >>;
-
-};
-/*
-UE-HistoryInformationFromTheUE ::= OCTET STRING
-*/
-
-struct UE_HistoryInformationFromTheUE : asn::ostring<>
-{
-       static constexpr const char* name() {return "UE-HistoryInformationFromTheUE";}
-       using parent_t = asn::ostring<>;
-
-};
-
-/*
-UE-RLF-Report-Container::= OCTET STRING
-*/
-
-struct UE_RLF_Report_Container : asn::ostring<>
-{
-       static constexpr const char* name() {return "UE-RLF-Report-Container";}
-       using parent_t = asn::ostring<>;
-
-};
-
-/*
-UE-RLF-Report-Container-for-extended-bands ::= OCTET STRING
-*/
-
-struct UE_RLF_Report_Container_for_extended_bands : asn::ostring<>
-{
-       static constexpr const char* name() {return "UE-RLF-Report-Container-for-extended-bands";}
-       using parent_t = asn::ostring<>;
-
-};
-
-/*
-UE-S1AP-ID ::= INTEGER (0.. 4294967295)
-*/
-
-struct UE_S1AP_ID : asn::integer<>
-{
-       using constraint_t = asn::constraints<false,asn::span<0, 4294967295>>;
-       static constexpr const char* name() {return "UE-S1AP-ID";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-UE-Sidelink-Aggregate-MaximumBitRate-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-UE-X2AP-ID ::= INTEGER (0..4095)
-*/
-
-struct UE_X2AP_ID : asn::integer<>
-{
-       using constraint_t = asn::constraints<false,asn::span<0, 4095>>;
-       static constexpr const char* name() {return "UE-X2AP-ID";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-UE-X2AP-ID-Extension ::= INTEGER (0..4095, ...)
-*/
-
-struct UE_X2AP_ID_Extension : asn::integer<>
-{
-       using constraint_t = asn::constraints<true,asn::span<0, 4095>>;
-       static constexpr const char* name() {return "UE-X2AP-ID-Extension";}
-       using parent_t = asn::integer<>;
-
-};
-
-/*
-UEAggregate-MaximumBitrate-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       { ID id-extended-uEaggregateMaximumBitRateDownlink      CRITICALITY ignore      EXTENSION ExtendedBitRate       PRESENCE optional}|
-       { ID id-extended-uEaggregateMaximumBitRateUplink        CRITICALITY ignore      EXTENSION ExtendedBitRate       PRESENCE optional},
-       ...
-}
-*/
-
-struct UEAggregate_MaximumBitrate_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 3; }
-               void clear() {type = 0;}
-               void select_id_extended_uEaggregateMaximumBitRateDownlink() { set(id_extended_uEaggregateMaximumBitRateDownlink); type=1;}
-               void select_id_extended_uEaggregateMaximumBitRateUplink() { set(id_extended_uEaggregateMaximumBitRateUplink); type=2;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(id_extended_uEaggregateMaximumBitRateDownlink)) { type = 1; return true; }
-                       else if(equal(id_extended_uEaggregateMaximumBitRateUplink)) { type = 2; return true; }
-                       else { type = 3; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(id_extended_uEaggregateMaximumBitRateDownlink);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(id_extended_uEaggregateMaximumBitRateUplink);} return false;
-                       case 3: type = 3; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 3; }
-               void clear() {type = 0;}
-               void select_id_extended_uEaggregateMaximumBitRateDownlink() { set(ignore); type=1;}
-               void select_id_extended_uEaggregateMaximumBitRateUplink() { set(ignore); type=2;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(ignore)) { type = 1; return true; }
-                       else if(equal(ignore)) { type = 2; return true; }
-                       else { type = 3; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(ignore);} return false;
-                       case 3: type = 3; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               ExtendedBitRate& select_id_extended_uEaggregateMaximumBitRateDownlink() { return set<ExtendedBitRate>(1); }
-               ExtendedBitRate const* get_id_extended_uEaggregateMaximumBitRateDownlink() const { return get<ExtendedBitRate>(1); }
-               ExtendedBitRate& select_id_extended_uEaggregateMaximumBitRateUplink() { return set<ExtendedBitRate>(2); }
-               ExtendedBitRate const* get_id_extended_uEaggregateMaximumBitRateUplink() const { return get<ExtendedBitRate>(2); }
-               bool is_unknown() const { return type == 3; }
-               void clear()
-               {
-                       switch(type)
-                       {
-                       case 1: var.destroy<ExtendedBitRate>(); break;
-                       case 2: var.destroy<ExtendedBitRate>(); break;
-                       }
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-                       v.template operator()<ExtendedBitRate>(1);
-                       v.template operator()<ExtendedBitRate>(2);
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: v(select_id_extended_uEaggregateMaximumBitRateDownlink()); return true;
-                       case 2: v(select_id_extended_uEaggregateMaximumBitRateUplink()); return true;
-                       case 3: if(type != 3) {clear(); asn::base::set();} type = 3; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       switch(type)
-                       {
-                       case 1: v(var.as<ExtendedBitRate>()); return true;
-                       case 2: v(var.as<ExtendedBitRate>()); return true;
-                       }
-                       return false;
-
-               }
-               private:
-               template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
-               template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
-               union union_type
-               {
-                       char dummy1[sizeof(ExtendedBitRate)];
-
-               };
-               asn::variant<sizeof(union_type)> var;
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 3; }
-               void clear() {type = 0;}
-               void select_id_extended_uEaggregateMaximumBitRateDownlink() { set(optional); type=1;}
-               void select_id_extended_uEaggregateMaximumBitRateUplink() { set(optional); type=2;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       if(equal(optional)) { type = 1; return true; }
-                       else if(equal(optional)) { type = 2; return true; }
-                       else { type = 3; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 2: type = 2; if(v(ref_nested())) { return equal(optional);} return false;
-                       case 3: type = 3; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-UEAggregateMaximumBitRate ::= SEQUENCE {
-       uEaggregateMaximumBitRateDownlink       BitRate,
-       uEaggregateMaximumBitRateUplink         BitRate,
-       iE-Extensions                                           ProtocolExtensionContainer { {UEAggregate-MaximumBitrate-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct UEAggregateMaximumBitRate : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "UEAggregateMaximumBitRate";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct uEaggregateMaximumBitRateDownlink_t : BitRate
-       {
-               static constexpr const char* name() {return "uEaggregateMaximumBitRateDownlink_t";}
-               using parent_t = BitRate;
-
-       };
-       uEaggregateMaximumBitRateDownlink_t& ref_uEaggregateMaximumBitRateDownlink() {return uEaggregateMaximumBitRateDownlink;}
-       uEaggregateMaximumBitRateDownlink_t const& ref_uEaggregateMaximumBitRateDownlink() const {return uEaggregateMaximumBitRateDownlink;}
-       struct uEaggregateMaximumBitRateUplink_t : BitRate
-       {
-               static constexpr const char* name() {return "uEaggregateMaximumBitRateUplink_t";}
-               using parent_t = BitRate;
-
-       };
-       uEaggregateMaximumBitRateUplink_t& ref_uEaggregateMaximumBitRateUplink() {return uEaggregateMaximumBitRateUplink;}
-       uEaggregateMaximumBitRateUplink_t const& ref_uEaggregateMaximumBitRateUplink() const {return uEaggregateMaximumBitRateUplink;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<UEAggregate_MaximumBitrate_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<UEAggregate_MaximumBitrate_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(uEaggregateMaximumBitRateDownlink);
-               v(uEaggregateMaximumBitRateUplink);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(uEaggregateMaximumBitRateDownlink);
-               v(uEaggregateMaximumBitRateUplink);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               uEaggregateMaximumBitRateDownlink.clear();
-               uEaggregateMaximumBitRateUplink.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       uEaggregateMaximumBitRateDownlink_t     uEaggregateMaximumBitRateDownlink;
-       uEaggregateMaximumBitRateUplink_t       uEaggregateMaximumBitRateUplink;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-UENRMeasurement-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct UENRMeasurement_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-UENRMeasurement ::= SEQUENCE {
-       uENRMeasurements                        RRCContainer,
-       iE-Extensions                   ProtocolExtensionContainer { {UENRMeasurement-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct UENRMeasurement : asn::sequence<2, 0, true, 1>
-{
-       static constexpr const char* name() {return "UENRMeasurement";}
-       using parent_t = asn::sequence<2, 0, true, 1>;
-       struct uENRMeasurements_t : RRCContainer
-       {
-               static constexpr const char* name() {return "uENRMeasurements_t";}
-               using parent_t = RRCContainer;
-
-       };
-       uENRMeasurements_t& ref_uENRMeasurements() {return uENRMeasurements;}
-       uENRMeasurements_t const& ref_uENRMeasurements() const {return uENRMeasurements;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<UENRMeasurement_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<UENRMeasurement_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(uENRMeasurements);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(uENRMeasurements);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               uENRMeasurements.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       uENRMeasurements_t      uENRMeasurements;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-UESecurityCapabilities-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct UESecurityCapabilities_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-UESecurityCapabilities ::= SEQUENCE {
-       encryptionAlgorithms                            EncryptionAlgorithms,
-       integrityProtectionAlgorithms           IntegrityProtectionAlgorithms,
-       iE-Extensions                                           ProtocolExtensionContainer { {UESecurityCapabilities-ExtIEs} }          OPTIONAL,
-...
-}
-*/
-
-struct UESecurityCapabilities : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "UESecurityCapabilities";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct encryptionAlgorithms_t : EncryptionAlgorithms
-       {
-               static constexpr const char* name() {return "encryptionAlgorithms_t";}
-               using parent_t = EncryptionAlgorithms;
-
-       };
-       encryptionAlgorithms_t& ref_encryptionAlgorithms() {return encryptionAlgorithms;}
-       encryptionAlgorithms_t const& ref_encryptionAlgorithms() const {return encryptionAlgorithms;}
-       struct integrityProtectionAlgorithms_t : IntegrityProtectionAlgorithms
-       {
-               static constexpr const char* name() {return "integrityProtectionAlgorithms_t";}
-               using parent_t = IntegrityProtectionAlgorithms;
-
-       };
-       integrityProtectionAlgorithms_t& ref_integrityProtectionAlgorithms() {return integrityProtectionAlgorithms;}
-       integrityProtectionAlgorithms_t const& ref_integrityProtectionAlgorithms() const {return integrityProtectionAlgorithms;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<UESecurityCapabilities_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<UESecurityCapabilities_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(encryptionAlgorithms);
-               v(integrityProtectionAlgorithms);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(encryptionAlgorithms);
-               v(integrityProtectionAlgorithms);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               encryptionAlgorithms.clear();
-               integrityProtectionAlgorithms.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       encryptionAlgorithms_t  encryptionAlgorithms;
-       integrityProtectionAlgorithms_t integrityProtectionAlgorithms;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-UESidelinkAggregateMaximumBitRate ::= SEQUENCE {
-       uESidelinkAggregateMaximumBitRate               BitRate,
-       iE-Extensions                                   ProtocolExtensionContainer { {UE-Sidelink-Aggregate-MaximumBitRate-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct UESidelinkAggregateMaximumBitRate : asn::sequence<2, 0, true, 1>
-{
-       static constexpr const char* name() {return "UESidelinkAggregateMaximumBitRate";}
-       using parent_t = asn::sequence<2, 0, true, 1>;
-       struct uESidelinkAggregateMaximumBitRate_t : BitRate
-       {
-               static constexpr const char* name() {return "uESidelinkAggregateMaximumBitRate_t";}
-               using parent_t = BitRate;
-
-       };
-       uESidelinkAggregateMaximumBitRate_t& ref_uESidelinkAggregateMaximumBitRate() {return uESidelinkAggregateMaximumBitRate;}
-       uESidelinkAggregateMaximumBitRate_t const& ref_uESidelinkAggregateMaximumBitRate() const {return uESidelinkAggregateMaximumBitRate;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<UE_Sidelink_Aggregate_MaximumBitRate_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(uESidelinkAggregateMaximumBitRate);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(uESidelinkAggregateMaximumBitRate);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               uESidelinkAggregateMaximumBitRate.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       uESidelinkAggregateMaximumBitRate_t     uESidelinkAggregateMaximumBitRate;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-UEsToBeResetList-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct UEsToBeResetList_Item_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-UEsToBeResetList-Item::= SEQUENCE {
-       meNB-ID                                 UE-X2AP-ID,
-       meNB-ID-ext                             UE-X2AP-ID-Extension                                                                                                            OPTIONAL,
-       sgNB-ID                                 SgNB-UE-X2AP-ID                                                                                                                         OPTIONAL,
-       iE-Extensions                   ProtocolExtensionContainer { {UEsToBeResetList-Item-ExtIEs} }                           OPTIONAL,
-       ...
-}
-*/
-
-struct UEsToBeResetList_Item : asn::sequence<4, 0, true, 3>
-{
-       static constexpr const char* name() {return "UEsToBeResetList-Item";}
-       using parent_t = asn::sequence<4, 0, true, 3>;
-       struct meNB_ID_t : UE_X2AP_ID
-       {
-               static constexpr const char* name() {return "meNB_ID_t";}
-               using parent_t = UE_X2AP_ID;
-
-       };
-       meNB_ID_t& ref_meNB_ID() {return meNB_ID;}
-       meNB_ID_t const& ref_meNB_ID() const {return meNB_ID;}
-       struct meNB_ID_ext_t : UE_X2AP_ID_Extension
-       {
-               static constexpr const char* name() {return "meNB_ID_ext_t";}
-               using parent_t = UE_X2AP_ID_Extension;
-               static constexpr bool optional = true;
-
-       };
-       meNB_ID_ext_t& set_meNB_ID_ext() { meNB_ID_ext.setpresent(true); return meNB_ID_ext;}
-       meNB_ID_ext_t const* get_meNB_ID_ext() const {return meNB_ID_ext.is_valid() ? &meNB_ID_ext : nullptr;}
-       struct sgNB_ID_t : SgNB_UE_X2AP_ID
-       {
-               static constexpr const char* name() {return "sgNB_ID_t";}
-               using parent_t = SgNB_UE_X2AP_ID;
-               static constexpr bool optional = true;
-
-       };
-       sgNB_ID_t& set_sgNB_ID() { sgNB_ID.setpresent(true); return sgNB_ID;}
-       sgNB_ID_t const* get_sgNB_ID() const {return sgNB_ID.is_valid() ? &sgNB_ID : nullptr;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<UEsToBeResetList_Item_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<UEsToBeResetList_Item_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(meNB_ID);
-               v(meNB_ID_ext);
-               v(sgNB_ID);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(meNB_ID);
-               v(meNB_ID_ext);
-               v(sgNB_ID);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               meNB_ID.clear();
-               meNB_ID_ext.clear();
-               sgNB_ID.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       meNB_ID_t       meNB_ID;
-       meNB_ID_ext_t   meNB_ID_ext;
-       sgNB_ID_t       sgNB_ID;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-UEsToBeResetList ::= SEQUENCE (SIZE (1.. maxUEsinengNBDU)) OF UEsToBeResetList-Item
-*/
-
-struct UEsToBeResetList_elm : UEsToBeResetList_Item
-{
-       static constexpr const char* name() {return "UEsToBeResetList_elm";}
-       using parent_t = UEsToBeResetList_Item;
-
-};
-struct UEsToBeResetList : asn::sequenceof<UEsToBeResetList_elm>
-{
-       static constexpr const char* name() {return "UEsToBeResetList";}
-       using parent_t = asn::sequenceof<UEsToBeResetList_elm>;
-       using constraint_t = asn::constraints<false,asn::span<1,  maxUEsinengNBDU >>;
-
-};
-/*
-UL-HighInterferenceIndication ::= BIT STRING (SIZE(1..110, ...))
-*/
-
-struct UL_HighInterferenceIndication : asn::bstring<>
-{
-       using constraint_t = asn::constraints<true,asn::span<1, 110>>;
-       static constexpr const char* name() {return "UL-HighInterferenceIndication";}
-       using parent_t = asn::bstring<>;
-
-};
-
-/*
-UL-HighInterferenceIndicationInfo-Item-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct UL_HighInterferenceIndicationInfo_Item_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-UL-HighInterferenceIndicationInfo-Item ::= SEQUENCE {
-       target-Cell-ID                                  ECGI,
-       ul-interferenceindication               UL-HighInterferenceIndication,
-       iE-Extensions                                   ProtocolExtensionContainer { {UL-HighInterferenceIndicationInfo-Item-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct UL_HighInterferenceIndicationInfo_Item : asn::sequence<3, 0, true, 1>
-{
-       static constexpr const char* name() {return "UL-HighInterferenceIndicationInfo-Item";}
-       using parent_t = asn::sequence<3, 0, true, 1>;
-       struct target_Cell_ID_t : ECGI
-       {
-               static constexpr const char* name() {return "target_Cell_ID_t";}
-               using parent_t = ECGI;
-
-       };
-       target_Cell_ID_t& ref_target_Cell_ID() {return target_Cell_ID;}
-       target_Cell_ID_t const& ref_target_Cell_ID() const {return target_Cell_ID;}
-       struct ul_interferenceindication_t : UL_HighInterferenceIndication
-       {
-               static constexpr const char* name() {return "ul_interferenceindication_t";}
-               using parent_t = UL_HighInterferenceIndication;
-
-       };
-       ul_interferenceindication_t& ref_ul_interferenceindication() {return ul_interferenceindication;}
-       ul_interferenceindication_t const& ref_ul_interferenceindication() const {return ul_interferenceindication;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<UL_HighInterferenceIndicationInfo_Item_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<UL_HighInterferenceIndicationInfo_Item_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(target_Cell_ID);
-               v(ul_interferenceindication);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(target_Cell_ID);
-               v(ul_interferenceindication);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               target_Cell_ID.clear();
-               ul_interferenceindication.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       target_Cell_ID_t        target_Cell_ID;
-       ul_interferenceindication_t     ul_interferenceindication;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-UL-HighInterferenceIndicationInfo ::= SEQUENCE (SIZE(1..maxCellineNB)) OF UL-HighInterferenceIndicationInfo-Item
-*/
-
-struct UL_HighInterferenceIndicationInfo_elm : UL_HighInterferenceIndicationInfo_Item
-{
-       static constexpr const char* name() {return "UL_HighInterferenceIndicationInfo_elm";}
-       using parent_t = UL_HighInterferenceIndicationInfo_Item;
-
-};
-struct UL_HighInterferenceIndicationInfo : asn::sequenceof<UL_HighInterferenceIndicationInfo_elm>
-{
-       static constexpr const char* name() {return "UL-HighInterferenceIndicationInfo";}
-       using parent_t = asn::sequenceof<UL_HighInterferenceIndicationInfo_elm>;
-       using constraint_t = asn::constraints<false,asn::span<1,  maxCellineNB >>;
-
-};
-/*
-UL-UE-Configuration::= ENUMERATED { no-data, shared, only, ... }
-*/
-
-struct UL_UE_Configuration : asn::enumerated<3, 0, true>
-{
-       static constexpr const char* name() {return "UL-UE-Configuration";}
-       using parent_t = asn::enumerated<3, 0, true>;
-       typedef enum {
-               no_data
-               ,shared
-               ,only
-       } index_t;
-
-};
-
-/*
-ULConfiguration-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct ULConfiguration_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-ULConfiguration::= SEQUENCE {
-       uL-PDCP                 UL-UE-Configuration,
-       iE-Extensions                                   ProtocolExtensionContainer { {ULConfiguration-ExtIEs} } OPTIONAL,
-       ...
-}
-*/
-
-struct ULConfiguration : asn::sequence<2, 0, true, 1>
-{
-       static constexpr const char* name() {return "ULConfiguration";}
-       using parent_t = asn::sequence<2, 0, true, 1>;
-       struct uL_PDCP_t : UL_UE_Configuration
-       {
-               static constexpr const char* name() {return "uL_PDCP_t";}
-               using parent_t = UL_UE_Configuration;
-
-       };
-       uL_PDCP_t& ref_uL_PDCP() {return uL_PDCP;}
-       uL_PDCP_t const& ref_uL_PDCP() const {return uL_PDCP;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<ULConfiguration_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<ULConfiguration_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(uL_PDCP);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(uL_PDCP);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               uL_PDCP.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       uL_PDCP_t       uL_PDCP;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-VehicleUE ::= ENUMERATED {
-       authorized,
-       not-authorized,
-       ...
-}
-*/
-
-struct VehicleUE : asn::enumerated<2, 0, true>
-{
-       static constexpr const char* name() {return "VehicleUE";}
-       using parent_t = asn::enumerated<2, 0, true>;
-       typedef enum {
-               authorized
-               ,not_authorized
-       } index_t;
-
-};
-
-/*
-V2XServicesAuthorized-ExtIEs X2AP-PROTOCOL-EXTENSION ::= {
-       ...
-}
-*/
-
-struct V2XServicesAuthorized_ExtIEs
-{
-       struct id_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::id_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::id_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct criticality_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::criticality_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::criticality_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct Extension_t : asn::typefield<true>
-       {
-               ~Extension_t()  {clear();}
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear()
-               {
-                       type = 0; ref_nested().clear();
-               }
-               template<typename V> static inline void enumerate(V& v)
-               {
-
-               }
-               protected:
-               template<typename V> bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: if(type != 1) {clear(); asn::base::set();} type = 1; return true;
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) return false;
-                       return false;
-
-               }
-               private:
-               size_t type {0};
-
-       };
-       struct presence_t : asn::fixedtypefield<X2AP_PROTOCOL_EXTENSION::presence_t, true>
-       {
-               size_t get_index() const {return type;}
-               bool is_unknown() const { return type == 1; }
-               void clear() {type = 0;}
-               X2AP_PROTOCOL_EXTENSION::presence_t const& ref_value() const {return ref_nested();}
-               template<typename V>  bool decode(V& v)
-               {
-                       clear();
-                       if(!v(ref_nested())) return false;
-                       { type = 1; return true;}
-                       return false;
-
-               }
-               template<typename V> bool encode(V& v) const
-               {
-                       return v(ref_nested());
-
-               }
-               protected:
-               template<typename V>  bool decode(size_t index, V& v)
-               {
-                       clear();
-                       switch(index)
-                       {
-                       case 1: type = 1; return v(ref_nested());
-                       ref_nested().clear();
-                       }
-                       return false;
-
-               }
-               template<typename V> bool encode(size_t index, V& v) const
-               {
-                       if(index != type) {return false;} return v(ref_nested());
-
-               }
-               private:
-               size_t type {0};
-
-       };
-
-};
-/*
-V2XServicesAuthorized ::= SEQUENCE {
-       vehicleUE                       VehicleUE                                                                                                               OPTIONAL,
-pedestrianUE                   PedestrianUE                                                                                                    OPTIONAL,
-       iE-Extensions           ProtocolExtensionContainer { {V2XServicesAuthorized-ExtIEs} }   OPTIONAL,
-       ...
-}
-*/
-
-struct V2XServicesAuthorized : asn::sequence<3, 0, true, 3>
-{
-       static constexpr const char* name() {return "V2XServicesAuthorized";}
-       using parent_t = asn::sequence<3, 0, true, 3>;
-       struct vehicleUE_t : VehicleUE
-       {
-               static constexpr const char* name() {return "vehicleUE_t";}
-               using parent_t = VehicleUE;
-               static constexpr bool optional = true;
-
-       };
-       vehicleUE_t& set_vehicleUE() { vehicleUE.setpresent(true); return vehicleUE;}
-       vehicleUE_t const* get_vehicleUE() const {return vehicleUE.is_valid() ? &vehicleUE : nullptr;}
-       struct pedestrianUE_t : PedestrianUE
-       {
-               static constexpr const char* name() {return "pedestrianUE_t";}
-               using parent_t = PedestrianUE;
-               static constexpr bool optional = true;
-
-       };
-       pedestrianUE_t& set_pedestrianUE() { pedestrianUE.setpresent(true); return pedestrianUE;}
-       pedestrianUE_t const* get_pedestrianUE() const {return pedestrianUE.is_valid() ? &pedestrianUE : nullptr;}
-       struct iE_Extensions_t : ProtocolExtensionContainer<V2XServicesAuthorized_ExtIEs>
-       {
-               static constexpr const char* name() {return "iE_Extensions_t";}
-               using parent_t = ProtocolExtensionContainer<V2XServicesAuthorized_ExtIEs>;
-               static constexpr bool optional = true;
-
-       };
-       iE_Extensions_t& set_iE_Extensions() { iE_Extensions.setpresent(true); return iE_Extensions;}
-       iE_Extensions_t const* get_iE_Extensions() const {return iE_Extensions.is_valid() ? &iE_Extensions : nullptr;}
-       template<typename V> void decode(V& v)
-       {
-               v(vehicleUE);
-               v(pedestrianUE);
-               v(iE_Extensions);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(vehicleUE);
-               v(pedestrianUE);
-               v(iE_Extensions);
-
-       };
-       void clear()
-       {
-               vehicleUE.clear();
-               pedestrianUE.clear();
-               iE_Extensions.clear();
-
-       };
-       private:
-       vehicleUE_t     vehicleUE;
-       pedestrianUE_t  pedestrianUE;
-       iE_Extensions_t iE_Extensions;
-
-};
-/*
-WT-UE-XwAP-ID ::= OCTET STRING (SIZE (3))
-*/
-
-struct WT_UE_XwAP_ID : asn::ostring<>
-{
-       using constraint_t = asn::constraints<false,asn::one<3>>;
-       static constexpr const char* name() {return "WT-UE-XwAP-ID";}
-       using parent_t = asn::ostring<>;
-
-};
-
-/*
-WTID-Type1 ::= SEQUENCE {
-       pLMN-Identity                                   PLMN-Identity,
-       shortWTID                                               BIT STRING (SIZE(24)),
-       ...
-}
-*/
-
-struct WTID_Type1 : asn::sequence<2, 0, true, 0>
-{
-       static constexpr const char* name() {return "WTID-Type1";}
-       using parent_t = asn::sequence<2, 0, true, 0>;
-       struct pLMN_Identity_t : PLMN_Identity
-       {
-               static constexpr const char* name() {return "pLMN_Identity_t";}
-               using parent_t = PLMN_Identity;
-
-       };
-       pLMN_Identity_t& ref_pLMN_Identity() {return pLMN_Identity;}
-       pLMN_Identity_t const& ref_pLMN_Identity() const {return pLMN_Identity;}
-       struct shortWTID_t : asn::bstring<>
-       {
-               using constraint_t = asn::constraints<false,asn::one<24>>;
-               static constexpr const char* name() {return "shortWTID_t";}
-               using parent_t = asn::bstring<>;
-
-       };
-
-       shortWTID_t& ref_shortWTID() {return shortWTID;}
-       shortWTID_t const& ref_shortWTID() const {return shortWTID;}
-       template<typename V> void decode(V& v)
-       {
-               v(pLMN_Identity);
-               v(shortWTID);
-
-       };
-       template<typename V> void encode(V& v) const
-       {
-               v(pLMN_Identity);
-               v(shortWTID);
-
-       };
-       void clear()
-       {
-               pLMN_Identity.clear();
-               shortWTID.clear();
-
-       };
-       private:
-       pLMN_Identity_t pLMN_Identity;
-       shortWTID_t     shortWTID;
-
-};
-/*
-WTID-Long-Type2 ::= BIT STRING (SIZE(48))
-*/
-
-struct WTID_Long_Type2 : asn::bstring<>
-{
-       using constraint_t = asn::constraints<false,asn::one<48>>;
-       static constexpr const char* name() {return "WTID-Long-Type2";}
-       using parent_t = asn::bstring<>;
-
-};
-
-/*
-WTID ::= CHOICE {
-       wTID-Type1                      WTID-Type1,
-       wTID-Type2                      WTID-Long-Type2,
-       ...
-}
-*/
-
-struct WTID : asn::choice<2, 0, true>
-{
-       static constexpr const char* name() {return "WTID";}
-       using parent_t = asn::choice<2, 0, true>;
-       index_type get_index() const {return index;}
-       bool is_unknown() const {return index == 3;}
-       void set_unknown() { set_index(3);  }
-       ~WTID() {clear();}
-       struct wTID_Type1_t : WTID_Type1
-       {
-               static constexpr const char* name() {return "wTID_Type1_t";}
-               using parent_t = WTID_Type1;
-
-       };
-       struct wTID_Type2_t : WTID_Long_Type2
-       {
-               static constexpr const char* name() {return "wTID_Type2_t";}
-               using parent_t = WTID_Long_Type2;
-
-       };
-       void clear()
-       {
-               switch(get_index())
-               {
-               case 1: var.destroy<wTID_Type1_t>(); break;
-               case 2: var.destroy<wTID_Type2_t>(); break;
-               }
-               index = 0;
-               base::clear();
-       }
-       template<typename V> bool decode(size_t idx, V& v)
-       {
-               clear();
-               switch(idx)
-               {
-               case 1: set_index(1); return v(var.build<wTID_Type1_t>());
-               case 2: set_index(2); return v(var.build<wTID_Type2_t>());
-               }
-               return false;
-
-       }
-       template<typename V> bool encode(V& v) const
-       {
-               switch(get_index())
-               {
-               case 1: return v(var.as<wTID_Type1_t>());
-               case 2: return v(var.as<wTID_Type2_t>());
-               }
-               return false;
-       }
-       template<typename V> static inline void enumerate(V& v)
-       {
-               v.template operator()<wTID_Type1_t>(1);
-               v.template operator()<wTID_Type2_t>(2);
-
-       }
-       wTID_Type1_t& select_wTID_Type1() { if(get_index() != 1) { clear(); set_index(1); return var.build<wTID_Type1_t>();} return var.as<wTID_Type1_t>();}
-       wTID_Type1_t const* get_wTID_Type1() const { if(get_index() == 1) { return &var.as<wTID_Type1_t>();} return nullptr; }
-       wTID_Type2_t& select_wTID_Type2() { if(get_index() != 2) { clear(); set_index(2); return var.build<wTID_Type2_t>();} return var.as<wTID_Type2_t>();}
-       wTID_Type2_t const* get_wTID_Type2() const { if(get_index() == 2) { return &var.as<wTID_Type2_t>();} return nullptr; }
-       private:
-       void set_index(index_type i) {index = i; base::set();}
-       union union_type
-       {
-               char dummy1[sizeof(wTID_Type1_t)];
-               char dummy2[sizeof(wTID_Type2_t)];
-
-       };
-       asn::variant<sizeof(union_type)>        var;
-       index_type      index {0};
-};
-/*
-X2BenefitValue ::= INTEGER (1..8, ...)
-*/
-
-struct X2BenefitValue : asn::integer<>
-{
-       using constraint_t = asn::constraints<true,asn::span<1, 8>>;
-       static constexpr const char* name() {return "X2BenefitValue";}
-       using parent_t = asn::integer<>;
-
-};